Как передать JSON данных в Express REST API - PullRequest
1 голос
/ 16 февраля 2020

Я создаю REST API с использованием Node / Express, и у меня возник вопрос о настройке API и о том, как включить в него файл JSON. В качестве примера данных JSON, которые я хотел бы посмотреть, у меня есть следующие данные, которые включают идентификационный номер, модель и цвет:

{"1": {"car_model": "Ferrari", "color": "Silver"}, "2": {"car_model": "Porsche", "color": "Green"}, "3": {"car_model": "Camry", "color": "Blue "}}

Теперь я хотел бы, чтобы маршрут GET возвращал все автомобили из списка JSON и возвращал идентификатор, цвет и модель. Я не уверен, как включить данные JSON в запросы (скажем, они находятся на моем жестком диске по пути / JSON)

У меня следующий код, настроенный в качестве основы для API:

// BASE SETUP
// =============================================================================

// call the packages we need
var express    = require('express');        // call express
var app        = express();                 // define our app using express
var bodyParser = require('body-parser');

// configure app to use bodyParser()
// this will let us get the data from a POST
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

var port = process.env.PORT || 8080;        // set our port


// ROUTES FOR OUR API
// =============================================================================
var router = express.Router();              // get an instance of the express Router

// test route to make sure everything is working (accessed at GET http://localhost:8080/api)
router.get('/endpoint_get', function(req, res) {
    res.json({ message: 'hooray! welcome to our api!' });   
});

router.post('/endpoint_post', function(req, res) {
    res.json({ message: 'hooray! welcome to our api!' });   
});


// REGISTER OUR ROUTES -------------------------------
// all of our routes will be prefixed with /endpoint.com
app.use('/endpoint.com/', router);

// START THE SERVER
// =============================================================================
app.listen(port);
console.log('Magic happens on port ' + port);

Не обязательно использовать этот код, я хотел бы получить руководство или помощь от кого-либо или пример того, как можно включить данные JSON (из некоторого случайного файла) в запросы HTTP , Спасибо

Ответы [ 2 ]

1 голос
/ 16 февраля 2020
const jsonDoc = require('../Desktop/jsonDoc.json');// top of file...


router.get('/endpoint_get', function(req, res) {
try{
let jsonObj = JSON.parse(jsonDoc) /*{ "1": { "car_model": "Ferrari", "color": "Silver" }, "2": { "car_model": "Porsche", "color": "Green" }, "3": { "car_model": "Camry", "color": "Blue" } }*/
console.log(jsonObj)

    res.json({
        message: 'hooray! welcome to our api!',
        jsonDoc:JSON.stringify(jsonObj) 
     });   
/* returns {
  "message": "hooray! welcome to our api!",
  "jsonDoc": { "1": { "car_model": "Ferrari", "color": "Silver" }, "2": { "car_model": "Porsche", "color": "Green" }, "3": { "car_model": "Camry", "color": "Blue" } }
}*/

}catch(error){ /* now if anything above fails a error code can be returned to the caller and debug info can be sent to the developer*/
console.trace(error);// trace out the error.
res.sendStatus(500)// return error code to user.
}
    });
1 голос
/ 16 февраля 2020

Один из вариантов - использовать узел fs (файловая система).

Один вариант - преобразовать конечную точку в асинхронную c функцию.

При каждом запросе открывать файл с помощью fs .открытый(). В зависимости от ваших требований либо прочитайте весь файл, либо укажите смещение для чтения.

Затем выполните синтаксический анализ данных с помощью JSON.parse(), форматирования и возврата.


Другой вариант будет сделать все вышеописанные шаги при запуске, сохраняя содержимое файла в каком-то хранилище. Затем вы можете обойти медленное чтение с диска при обработке запроса.

Вот пример кода из узла docs . Я бы порекомендовал взглянуть на различные варианты.

Я бы также порекомендовал использовать методы, которые возвращают обещание (или обещают обратные вызовы). Таким образом, код, который обращается к нему, может иметь чистый порядок.

fs.open('/open/some/file.txt', 'r', (err, fd) => {
  if (err) throw err;
  fs.fstat(fd, (err, stat) => {
    if (err) throw err;
    // use stat

    // always close the file descriptor!
    fs.close(fd, (err) => {
      if (err) throw err;
    });
  });
});
...