Как избежать перезаписи существующего объекта file json в узле - PullRequest
1 голос
/ 09 июля 2020

Я пытаюсь решить проблему, при которой я пытаюсь написать файл json с данными, введенными пользователем. Но каждый раз, когда я ввожу новые данные, они перезаписывают существующие данные.

Как я могу избежать перезаписи существующего объекта json в файле json и вместо этого добавить новый объект в массив на основе пользовательского ввода?

userData. json:

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

сервер. 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");
     }
 });

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Вот грязный способ сделать это:

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

Каждый раз, когда вы хотите добавить запись, прочтите массив, добавьте к нему и снова выгрузите. Однако рассмотрите возможность перехода на базу данных, чтобы избежать этого.

0 голосов
/ 09 июля 2020

Чтобы добавить данные вместо их замены, вы можете передать флаг a+ в fs.writeFile:

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

Он создаст файл, если файл не существует. Если файл существует, то содержимое будет добавлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...