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

我有一个小的JSON文件

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

并想操纵一个特定对象的数据,由其IDselect。

我要

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

所以我去了这个路线,通过使用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)作为参数,我删除文件中的所有数据,只是写下新的对象。 所以这可能不会这样工作。

尝试这个,

 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); }); }); 

fs.writeFile(file, data[, options], callback)

传递string化的JSON作为第二个参数。

 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 var dataToWrite = JSON.stringify(user); fs.writeFile('./database.json', dataToWrite, (err) => { // the second parameter is missing! res.send(user.gold); // send a response to the client }); }); });