簡體   English   中英

如何避免在節點中覆蓋現有文件 json object

[英]How to avoid overwrite of existing file json object in node

我正在嘗試解決一個問題,即我嘗試使用用戶輸入詳細信息編寫 json 文件。 但是每次我輸入新的細節時,它都會覆蓋現有的數據。

如何避免在 json 文件中覆蓋現有的 json object 並在基於用戶輸入的數組中添加新的 ZA8CFDE6331BD59EB2AC96F8911C4B6?

用戶數據.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");
     }
 });

為了 append 數據而不是替換它,您可以將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);
}});

每次要添加記錄時,讀取數組 append 並再次轉儲。 但是,請考慮切換到數據庫以避免這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM