Javascript 如何将JSON数据传递到Express REST API

Javascript 如何将JSON数据传递到Express REST API,javascript,node.js,json,rest,express,Javascript,Node.js,Json,Rest,Express,我正在使用Node/Express创建一个restapi,我有一个关于设置API以及如何将JSON文件合并到其中的问题。以下是我想查找的JSON数据示例,其中包括ID号、型号和颜色: { "1": { “汽车模型”:“法拉利”, “颜色”:“银色” }, "2": { “车型”:“保时捷”, “颜色”:“绿色” }, "3": { “车型”:“凯美瑞”, “颜色”:“蓝色” } } 现在,我想让GET route返回JSON列表中的所有汽车,并返回ID、颜色和型号。我不知道如何将JSON数据合并

我正在使用Node/Express创建一个restapi,我有一个关于设置API以及如何将JSON文件合并到其中的问题。以下是我想查找的JSON数据示例,其中包括ID号、型号和颜色:

{ "1": { “汽车模型”:“法拉利”, “颜色”:“银色” }, "2": { “车型”:“保时捷”, “颜色”:“绿色” }, "3": { “车型”:“凯美瑞”, “颜色”:“蓝色” } }

现在,我想让GET route返回JSON列表中的所有汽车,并返回ID、颜色和型号。我不知道如何将JSON数据合并到请求中(比如它位于我的硬盘上的path/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请求中。谢谢

一种选择是使用节点fs(文件系统)

一个选项是将端点转换为异步函数

在每个请求中,使用fs.open()打开文件。根据您的要求,可以读取整个文件,也可以提供要读取的偏移量

然后使用
JSON.parse()
解析数据,格式化并返回


另一种选择是在启动时执行上述所有步骤,将文件内容保存到某种存储中。然后,您可以在请求处理过程中绕过磁盘的慢速读取

下面是来自node的一些示例代码。我建议大家看看不同的选择

我还建议使用返回承诺(或承诺回调)的方法。这样,您可以对访问它的代码进行清晰的排序

fs.open('/open/some/file.txt',r',(err,fd)=>{
如果(错误)抛出错误;
fs.fstat(fd,(err,stat)=>{
如果(错误)抛出错误;
//使用统计
//始终关闭文件描述符!
fs.关闭(fd,(错误)=>{
如果(错误)抛出错误;
});
});
});

我相信您可以在该文件中要求它。像const json=require(“./jsonFile”)。然后按您需要的方式使用它如果您不想向DiskRoger写入任何更新,那么这将起作用谢谢Roger,所以如果我想从桌面上的路径访问它,比如说,我只是把它作为require的参数?例如:const json=require(“Desktop/jsonFile”)或者它必须在项目目录中吗?谢谢-这对于这个任务(即使用fs)来说似乎有点复杂,但也许这正是它所需要的。我将查看节点文档,看看还有什么。好的-在使用stringify之后,使用某种正则表达式或解析函数来分解JSON文件中的数据是否有意义(这是我最终想要完成的)?该文件有一个id、汽车类型和颜色,但我想从JSON文件中获取特定的数据。我将在stringify之前处理数据,您将使用JSON.parse(JSONfile)这将允许您使用点表示法来更改对象的键/值对。此外,在路由中使用try-catch。现在,如果出现故障,您的路线将被挂起。您能否提供一个如何做到这一点的示例,或者更具体地说,您的意思是什么?非常感谢。You's review已经很有帮助了,但我只是没有很好地理解try/catch(我觉得这可能是一个兔子洞,我花了很多时间,但有点超出了我的主要目的,所以我只是想了解一些关于你的意思的更具体的细节)。
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.
}
    });