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