【问题标题】:How to avoid overwrite of existing file json object in node如何避免覆盖节点中现有的文件 json 对象
【发布时间】:2020-10-30 10:20:57
【问题描述】:

我正在尝试解决一个问题,即我正在尝试编写包含用户输入详细信息的 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");
     }
 });

【问题讨论】:

  • fs.appendFile() 但您可以省略[ ]。这样,在阅读时您可以解析文件。或者,非常肮脏的做法是读取文件,解析它,将新对象添加到解析的数组中,然后再次转储。
  • 请注意 appendFile 除非您正确附加,否则您有可能制作格式错误的 json。例如,如果最后写入的是一个对象{...},而您附加了另一个对象,那么它最终会像{...}{...} 一样,这是格式错误的json。更容易读入、解析、修改和保存。
  • @ParthShah 省略 [] 这种方式意味着什么?我尝试使用 appendFile()。没用

标签: javascript node.js json filewriter


【解决方案1】:

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

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

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

【讨论】:

  • 试过这个。没有附加。
【解决方案2】:

这是一种肮脏的做法:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多