如何避免覆盖节点中现有的文件json对象



我试图解决一个问题,即我试图编写一个包含用户输入详细信息的json文件。但每次我输入新的细节时,都会覆盖现有的数据。

如何避免覆盖json文件中现有的json对象,并根据用户输入在数组中添加新对象?

userData.json

[
{
"name": "Name",
"number": "4334343",
"email": "email@email.com",
"message": "sdsd"
}
]

server.js:-

app.get("/myaction", function (request, response){
var name = request.query.name;
var number = request.query.number;
var email = request.query.email;
var message = request.query.message;

if (name != "") {
response.send("Your name is " + name + "number"+ number + "email"+ email + "message" + message);
const sendData = [{
name:name,
number:number,
email:email,
message:message
}];
fs.stat('./userdata.json', function(err, stat) {
if(err == null) {
console.log('File exists');
} else if(err.code === 'ENOENT') {

// file does not exist
var data = JSON.stringify(sendData,null, 2);
fs.writeFile('./userdata.json', data, (err) => {
if (!err) {
console.log('done');
}
});
} else {
console.log('Some other error: ', err.code);
}
});
} else {
response.send("Please provide info");
}
});

为了附加数据而不是替换数据,可以将a+标志传递给fs.writeFile:

fs.writeFile('./userdata.json', data, { flag: 'a+' }, (err) => {
if (!err) {
console.log('done');
}
});

如果文件不存在,它将创建该文件。如果文件存在,则会附加内容。

这是一种肮脏的方法:

fs.readFile('./userdata.json', (err, data) => {
if (err){
console.log(err);
} else {
obj = JSON.parse(data);
obj.push(sendData);
json = JSON.stringify(obj); 
fs.writeFile('./userdata.json', json, callback);
}});

每当你想添加一条记录时,读取数组,附加到它并再次转储它。但是,请考虑切换到数据库以避免这种情况。

最新更新