Node Js读取文本文件的最后一行输出Object Promise

时间:2018-04-13 08:43:51

标签: html node.js

我有一个运行Node Js的本地服务器。在我的第一页上,用户输入用户ID并将其保存在文本文件中。在下一页中,我想将userID与其他一些信息一起附加到文本文件中。我使用该选项只读取最后一行,因此我附加了正确的用户ID,而不是所有输入的ID。当我将最后一行记录到控制台时,它会正确输出。问题是当我尝试将它附加到新文本文件时,它显示为:" [object Promise]"并且不显示用户ID(而其他信息正确附加)。

app.post('/userID', function(req, res){

  var userID= req.body.userID + ';' + '\n';
  var data = fs.appendFileSync('userID.txt', userID, 'utf8');

  return res.sendfile('main.html');
});


app.post('/submit', function(req, res){

  var id = readLastLines.read('userID.txt', 1);
  var option = [ req.body.option],
  var toADD = fs.readFile('data/data1.txt','utf-8',(err, file) => fs.appendFileSync('output.txt',file.split('\n').map( (line) =>
            id + line + option.shift()).join('\n'),(err) => {}
              ));

  res.sendfile('main2.html');
});

提前谢谢!

1 个答案:

答案 0 :(得分:0)

因此,.map的返回值是一个使用映射值数组实现的promise。

这可能就是为什么你看到[object Promise]被添加,它在写入时没有解决的原因。

为了清晰起见,您可以尝试将其分开,但类似于以下内容:

var option = [ req.body.option],
var toADD = fs.readFile('data/data1.txt','utf-8',(err, file) => fs.appendFileSync('output.txt',file.split('\n').map( (line) =>
        id + line + option.shift()).then((res)=>{
            res.join('\n'),(err) => {};
            return res;
            })
        ));

基本上,map方法正在写入文件,但它本身是一个promise对象,这需要在追加之前先解决。

我还没有测试过上面的代码,但是当我有机会时我会很快。