我有一个这样的节点应用程序:
在db文件夹中,我有一个名为apartments.json的JSON文件,如下所示:
[
{
"id": 0,
"address": "Not set"
},
{
"id": 1,
"address": "Not set"
}
]
在routes文件夹中,我有一个具有post方法的路由器:
const express = require("express");
const router = express.Router();
const apartments = require("../db/apartments.json");
router.post('/', (req, res, next) => {
// read request
let apa = {
id: req.body.id,
address: req.body.address
};
// todo: add new apartment here...
});
module.exports = router;
我要实现的是读取文件,创建一个数组,将apa对象推入该数组并存储回json文件
答案 0 :(得分:0)
您可以使用fs
模块读取JSON文件。
fs.readFile('path/to/json', (data) => {
const parsed = JSON.parse(data)
// just imagine that arr is an array that you wan to push
let newArr;
for (i = 0; i < arr.length; i++ ) {
const element = arr[i]
newArr = parsed.push(element)
}
fs.writeFile('path/to/json', JSON.stringify(newArr), (success) => {
res.send({ success })
})
})
为了方便起见,如果您想转到其他文件夹,则应创建其目录名
// on the folder
exports const jsondir = __dirname
module.exports.jsondir = jsondir
只需要它。
答案 1 :(得分:0)
由于stringify()返回[object Object],因此JSON调用在帖子内部似乎不起作用,这是我的解决方案
router.post('/', (req, res, next) => {
let apa = {
id: req.body.id,
address: req.body.address
}
let apas = [];
let apartments = require('path/to/json');
apas.push(apa);
let str = "[ ";
for(let i = 0; i < apas.length - 1; i++) {
strAlt += '{"id": ' + apas[i].id + ', "name": "' + apas[i].name + '"}, ';
}
strAlt += '{"id": ' + apas[apas.length - 1].id + ', "name": "' + apas[apas.length -
1].name + '"} ] ';
console.log("hard coded stringify: " + strAlt);
fs.writeFile("path/to/json", strAlt, (err) => {
if(err) throw err;
console.log("file saved!");
});
console.log(apartments);
res.status(200).send(apa);