javascript - 如何将 JSON 数据传递到 Express REST API
问题描述
我正在使用 Node/Express 创建一个 REST API,并且有一个关于设置 API 以及如何将 JSON 文件合并到其中的问题。我有以下作为我想查找的 JSON 数据的示例,它包括 ID 号、型号和颜色:
{“1”:{“car_model”:“法拉利”,“颜色”:“银色”},“2”:{“car_model”:“保时捷”,“颜色”:“绿色”},“3”:{ “汽车模型”:“凯美瑞”,“颜色”:“蓝色”} }
现在,我想让 GET 路线返回 JSON 列表中的所有汽车并返回 ID、颜色和型号。我不确定如何将 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 请求中。谢谢
解决方案
一种选择是使用节点 fs(文件系统)。
一种选择是将端点转换为异步函数。
在每个请求中,使用 fs.open() 打开文件。根据您的要求,读取整个文件或提供要读取的偏移量。
JSON.parse()
然后用, 格式解析数据并返回。
另一种选择是在启动时执行上述所有步骤,将文件的内容保存到某种存储中。然后您可以绕过请求处理中从磁盘读取的慢速。
这是来自节点文档的一些示例代码。我建议看看不同的选项。
我还建议使用返回承诺(或承诺回调)的方法。这样,您访问它的代码就可以对其进行干净的排序。
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;
});
});
});
推荐阅读
- html - 将 HTML 内容从 SQL 数据库移动到 XML 文件以进行 Wordpress 导入
- openstreetmap - 如何计算一个节点出现的总次数是一种方式的集合?
- c# - C#:我的应用程序是否可以共享在我的其他类之一中触发的事件?
- typescript - 提取自己的类属性/成员类型
- sql - Oracle - 缺少左括号
- android - 如何通过BluetoothGatt在两部Android手机中相互通信
- upc - 如何解决 UPC 运行时错误:共享内存不足
- google-cloud-platform - Neo4j 本地与云的性能差异
- javascript - 单击按钮以删除自身及其父 div
- scala - Spark 流存储方法仅适用于 Duration 窗口,但不适用于自定义接收器中的 foreachRDD 工作流