我有一个JSON文件夹,我想用它来创建一个简单的API。
这是我的文件夹结构的简化版本:
/clients.json
/clients/1/client.json
/clients/2/client.json
...
我的/clients.json
文件如下所示:
[
{
"id": 1,
"name": "Jon Parker"
},
{
"id": 2,
"name": "Gareth Edwards"
},
...
]
我的/clients/1/client.json
文件如下所示:
[
{
"date": "2014-09-12",
"score": 40,
...
},
{
"date": "2015-02-27",
"score": 75,
...
},
{
"date": "2015-05-10",
"score": 75,
...
},
{
"date": "2016-08-27",
"score": 60,
...
}
]
clients.json
中的ID与相关详细信息所在的文件夹相关。
我在客户端文件夹中有很多JSON文件,而不是在客户端单独加载这些文件,我想使用Node.js创建一个API,这给了我更大的灵活性,即...
返回客户名称和ID的列表
/clients
返回客户详细信息
/clients/:id/details
最重要的是返回所有客户名称和相关详细信息
/clients/all/details
我确实开始使用json-server,但是它要求你的JSON是一个对象而不是一个数组,不幸的是我仍然坚持使用这个JSON的格式。
感谢任何帮助!
答案 0 :(得分:4)
使用内置文件系统模块从文件系统中获取文件。
以下是一个例子。
var fs = require('fs');
exports.getClientDetail = function (id) {
var result;
fs.readFile('/clients/' + id + '/client.json', function (err, data) {
if (err) throw err;
result.push(JSON.parse(data));
});
}
exports.getAllClientsDetail = function () {
// if the id is sequential, you can check if '/clients/' + id + '/client.json' exists for every i from 1 and up. If it does - push it to an array of objects. if for a certain i it does not exist, quit the scan and return the array of objects.
}
答案 1 :(得分:2)
你并没有像你想象的那样陷入困境。
您必须将数组包装在一个对象中。然后,在前端,您只需访问数组属性。
毕竟,JSON是 J ava s cript O bject N otation的首字母缩写。
编辑:好的,让我们尝试新的东西......
也许在使用json-server中的代码之前,请进行一些预处理。假设变量clientJson
是您已经读过的文件,请在使用json-server中的任何代码之前插入此代码:
clientJson = "{root:"+clientJson+"}";
这会将文件包装在第一个属性为root
的对象中。
之后,恢复阵列非常容易:
clientData = clientData.root;
答案 2 :(得分:2)
您可以将require
json直接作为节点中的对象,如下所示:
app.get('/clients/:id/details', (req, resp) => {
const id = req.params.id;
const data = require(`./clients/${id}/client.json`); // or whatever path
resp.send(data)
});
答案 3 :(得分:1)
如果您将文件夹结构上传到云服务(例如Amazon S3或Dropbox)并从那里提供服务,则可以在没有任何代码的情况下执行此操作。无需代码。
答案 4 :(得分:1)
您应该使用FS模块中的Read streams将数据发送到客户端,捕获可能的错误并在发送后清理内存。