提问者:小点点

如何在JavaScript/NodeJS中将数据附加到具有特定索引的JSON


我在做一个基本的“访客簿”功能。
用户可以提交一个小表单(有三个输入:名称,消息和表情)。
我用路由器组件中的req.body获取它。 我使用nodejs,express和BodyParser.

我只想将这些数据存储在JSON中,不想在这里涉及任何数据库。 我遇到了writeFile方法的麻烦,使用的是'fs'模块。 它可以工作,但它将新数据推入JSON文件的单数组之外。

您知道我是否可以推入数组内? 类似于。push方法,但是使用writefile/appendfile/wathever,可以很好地处理json文件。 下面是我的代码:

app.post(路由器):

app.post('/visitorBook', async (req, res) => { 
    let formData = {
        name: req.body.name,
        msg: req.body.msg,
        emoji: req.body.emoji
    }
    try {
        console.log(req.body)
        let data = JSON.stringify(formData, null, 2);

        fs.writeFile("./views/scripts/dataVisitorBook.json", data, { { // dataVisitorBook.json is the storage file
            flag:'a' // this flag specify 'please append it' over 'please override file'
        }
        }, (err) => {
            console.log('error :', err)
        });


        res.redirect('/contact') 
    } catch (error) {
        console.error('/visitorBook route error : ', error)
    }
})

我的JSON:

[
    {
        "name": "test1",
        "msg": "test1",
        "emoji": "<i class='fas fa-hippo fa-3x'></i>"
    },
    {
        "name": "test2",
        "msg": "test2",
        "emoji": "<i class='fas fa-hippo fa-3x'></i>"
    }
]


{
  "name": "sd",
  "msg": "sd",
  "emoji": "<i class='fas fa-kiwi-bird fa-3x'></i>"
}

所以最后一个名字中有“SD”和味精的就是推送的那个。 另外两个是我手工编写的,用于读文件测试。

我希望我提供了所需的所有信息。 不习惯在这里发帖。。。 谢谢你。


共1个答案

匿名用户

如果您从现有文件中读取并使用json.parse解析它,那么您将能够在它上实际使用array.push。 然后可以将字符串化的结果写回文件中:

fs.readFile("./views/scripts/dataVisitorBook.json", function (err, data) {
  if (err) throw err;
  let data = JSON.parse(data.toString('utf8'));

  data = JSON.stringify(data, null, 2);

  fs.writeFile("./views/scripts/dataVisitorBook.json", data, { { // dataVisitorBook.json is the storage file
      flag:'a' // this flag specify 'please append it' over 'please override file'
  }
  }, (err) => {
      console.log('error :', err)
  });
})

但它可能不是最优的,因为随着文件变大,它可能会花费更多的时间。