首页 > 解决方案 > 如何避免覆盖节点中现有的文件 json 对象

问题描述

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

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

用户数据.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");
     }
 });

标签: javascriptnode.jsjsonfilewriter

解决方案


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

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

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


推荐阅读