将数据发布到本地文件中而不替换现有数据

时间:2018-10-19 10:13:38

标签: node.js api

这是我的代码,它将从邮递员那里获取数据并写入文件,但是在写入文件时会替换现有数据,以解决此代码问题。

app.post('/postUser', function (req, res) {
    req.on('data', function (data) {
        console.log(data.toString());

        fs.writeFile('test.json', data, function (err) {
            if (!err) {
                console.log("Finished writing")
            }
        });
    });
});

我的输出应该是这样。

[
  {
    "name":"Alpha",
    "password":"123",
    "id": 1
  },
  {
    "name":"beta",
    "password":"123",
    "id": 2
  }
]

当我使用appendFile时,我将得到如下输出:

[
    {
        "name": "alpha",
        "password": "123",
        "id": 4
    }
]  {
        "name": "sdad",
        "password": "123",
        "id": 4
    }

3 个答案:

答案 0 :(得分:0)

app.post("/postUser", function(req, res) {
    req.on("data", function(data) {
        var newData;

        fs.readFile("test.json", function(readErr, fileData) {
            if (readErr) {
                console.error(readErr);
            }
            newData = JSON.parse(fileData).push(data);

            fs.writeFile("test.json", newData, function(writeErr) { 
                if (writeErr) {
                    console.error(writeErr);
                }
                console.log("Finished writing!");
            });
        });
    });
});

我通常会解决此问题的方法是读取现有数据,然后将您的新数据push添加到现有数据中并写入结果

答案 1 :(得分:0)

如果文件中存在数据,writeFile方法将只替换数据;如果不存在,则会创建一个文件并将数据写入其中。

使用appendFile方法代替fs.writFile将任何数据附加到文件中。

app.post('/postUser', function (req, res) {
    req.on('data', function (data) {
        console.log(data.toString());

        fs.appendFile('test.json', data, function (err) {
            if (!err) {
                console.log("Finished writing")
            }
        });
    });
});

答案 2 :(得分:0)

首先读取文件,然后将所做的更改附加到文件中,然后再次写入。

app.post('/postUser', function (req, res) {
    req.on('data', function (data) {
        fs.readFile('test.json', 'utf8', function(err, file){
            //handle error
            if(!file) {
                var file = '';
            }
            var temp = JSON.parse(file);
            temp.push(data);    
            fs.writeFile('test.json', temp, function (err) {
                //handle error
                console.log("FILE STORED")
            });
        })
    });
});