我想用nodejs编写一个json文件,但是我不知道,因为我是初学者
问题是,当我尝试将数据添加到json文件时,数据没有增加但被覆盖,例如,我有数据“ a”(总数据= 1),然后我尝试添加新数据“ b” ((总数据= 1),因为数据“ a”被数据“ b”覆盖,所以我的数据永远不会增加,仅仅只有1个数据
这是目录/user/userData.json中的json结构
[
{
"username": "john",
"password": "123qwejkl",
"nama": "john somelastname",
"no": "0128749726",
"email": "john@gmail.com",
"caption": "life is never flat"
}
]
这是我的nodejs代码
//const data = fs.readFileSync('./user/userData.json')
//const jsonData = JSON.parse(data)
app.post('/user', (req, res)=>{
const username = req.body.username
const password = req.body.password
const name = req.body.nama
const no = req.body.no
const email = req.body.email
const caption = req.body.caption
const sendData = [{
username:username,
password:password,
name:name,
no:no,
email:email,
caption:caption
}]
const sendJSON = JSON.stringify(sendData, null,2)
fs.writeFile('./user/userData.json', sendJSON)
res.send(sendData)
})
我知道我的代码中缺少某些内容,因此请帮助我如何从json文件读取数据,然后将新数据写入json文件
答案 0 :(得分:1)
为了不覆盖现有数据,您必须从文件系统读取文件,将其解析为JSON,将新元素(用户)压入数组并将结果写入文件系统:
//after you have created sendData object
fs.readFile('./user/userData.json', 'utf8', function (err, data) {
if (err) throw err;
output = JSON.parse(data);
output.push(sendData[0]);
const sendJSON = JSON.stringify(output, null, 2);
fs.writeFile('./user/userData.json', sendJSON, function(err){
if (err) throw err;
res.send(sendJSON)
});
});
我可以看到您正在创建某种用户注册系统。请注意,不建议使用文件在Web应用程序中存储数据。可能会导致性能下降,容错能力低以及可能存在的并发数据访问问题(竞争条件)。
根据您的情况,设想以下情况(分步进行):
/user
端点进行注册readFile
/user
端点进行注册readFile
writeFile
(初始+用户1数据)保存文件writeFile
(初始+用户2数据)覆盖文件结果,用户1数据将丢失(包括用户1数据的文件将被覆盖)。
几乎所有数据库都会阻止这种情况的发生。
我建议您研究以下主题:JS异步代码执行,JS回调,数据并发,在node.js中使用数据库(MongoDB是一个很好的开始)。