使用NodeJ中的文件系统模块从JSON文件更新内容

时间:2017-11-27 10:16:24

标签: javascript json node.js

我有一个小的JSON文件

{
  "users": [
    {
      "id": 1111,
      "name": "Foo",
      "gold": 2
    },{
      "id": 2222,
      "name": "Bar",
      "gold": 7
    }
  ]
}

并且想要操纵由其id。

选择的一个特定对象的数据

我想

  • 从文件中读取数据
  • 操纵数据
  • 数据写回文件
  • 向客户发送回复

所以我选择了这条路线,使用Ajax调用

app.get('/incG/:id', function (req, res) {

  fs.readFile('./database.json', 'utf8', function (err, data) {
    var json = JSON.parse(data); // Read the data
    var users = json.users; // Get all users
    var user = users.find(u => u.id === Number(req.params.id)); // get the user by id

    user.gold++; // increase his value

    fs.writeFile('./database.json', , (err) => { // the second parameter is missing!
      res.send(user.gold); // send a response to the client
    });
  });
});

如您所见,使用fs.writeFile(database, , (err) => {时缺少第二个参数。

我必须在那里传递什么?我只想更新一个特定的用户对象(一个特定的值)。

修改

当传入JSON.stringify(user)作为参数时,我删除文件中的所有数据,然后记下新对象。所以这可能不会这样。

1 个答案:

答案 0 :(得分:1)

试试这个,

fs.readFile('./database.json', 'utf8', function (err, data) {
    var json = JSON.parse(data); // Read the data
    var users = json.users; // Get all users
    var userGold;
    users.find(u => {
        if (u.id === Number(req.params.id)) {
            userGold = u.gold++;
        }
    });
    users = JSON.stringify(users);
    fs.writeFile('./database.json', users, (err) => {
         res.send(userGold);
    });
});