Как динамически получить JSON на основе параметров в экспрессе - PullRequest
0 голосов
/ 05 января 2019

Я новичок в узле и выражении, но пытаюсь динамически получить JSON на основе языковых настроек пользователя. Мне нужно выяснить, как обслуживать параметры:

Я подумал попытаться установить параметр "lang" для своей собственной переменной и вернуть его, но я читаю на SO, что это не лучшая практика: Использовать значение переменной в качестве переменной в javascript

var express = require("express");
var english = require('./Data/english.json');
var spanish = require('./Data/spanish.json'); 
var app = express();


app.use(function (req, res, next) {
  console.log('inside of app.use');
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-    
  With, Content-Type, Accept");
  next();
});

app.get("/:lang", function (req, res, next) {
  const lang = req.params.lang;
  console.log(lang)
  res.send(lang);
});


app.listen(5000, () => console.log('Listening on port 5000!'))

Я бы хотел иметь возможность динамически возвращать соответствующий файл json! Любые мысли высоко ценится.

Ответы [ 2 ]

0 голосов
/ 05 января 2019

TL; DR

  • Используйте модуль fs для чтения файлов JSON
  • Позвоните JSON.parse(), чтобы проанализировать необработанный JSON
  • Выберите файл в соответствии с var lang = req.params.lang, используя некую логику (например, 'spanish' -> './data/spanish.json')

код

const fs = require('fs');

// Supported languages
const supportedLanguages = ['english', 'spanish'];

app.get("/:lang", function (req, res, next) {
  const lang = req.params.lang;

  if (supportedLanguages.indexOf(lang) === -1) {
    res.status(400).send('Language not supported');
  } else {
    fs.readFile(`./Data/${lang}.json`, (err, data) => {
      // If error send a 500 status
      if (err) res.status(500).send(err);

      // Else parse the JSON file and send it
      else res.send(JSON.parse(data));
    });
  }
});
0 голосов
/ 05 января 2019

Просто вернуть данные JSON с помощью экспресс.

Просто используйте res.json({key: value , key2: value2}) вместо res.send

В вашем случае вы можете

const language = req.params.lang;
res.json({lang: lang})

вы получите объект JSON вместо текста

...