在post节点表达内读取并追加

时间:2019-04-29 14:21:43

标签: node.js express post

我有一个这样的节点应用程序:

  • tlc-rest-api
    • api
      • db
      • 路线

在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文件

2 个答案:

答案 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);