写入文件只写最后一项,而不是所有项目,为什么?

时间:2017-03-29 13:29:16

标签: javascript node.js

我正在尝试使用node.js将文件写入文件。问题是,它没有写入所有的Feed,只写了最后一个。

var fs = require('fs');
var feedParser = require('ortoo-feedparser')
var url = "http://iwnsvg.com/feed";
feedParser.parseUrl(url).on('article', function(article) {
  console.log('title; ', article.title);
    fs.writeFile("articles.json", JSON.stringify(article.title), function(err) {
    if(err) {
          console.log(err);
    }
  });
});

为什么?

3 个答案:

答案 0 :(得分:3)

只需将fs.writeFile(更改为fs.appendFile(,您就可以了。

每次调用时,

fs.writeFile都会覆盖您的文件,而fs.appendFile会添加到文件中。

答案 1 :(得分:0)

正如@Robert所说,您应该使用appendFile,但请注意,该更改不会写出有效的json。我不确定你想要实现什么输出 - 你只需要你可以写出一个txt文件的标题,每行都有一个标题,如下所示:

var fs = require('fs');
var feedParser = require('ortoo-feedparser')
var url = "http://iwnsvg.com/feed";
feedParser.parseUrl(url).on('article', function(article) {
  console.log('title; ', article.title);
    fs.appendFile("articles.txt", article.title + "\n", function(err) {
    if(err) {
          console.log(err);
    }
  });
});

要写出json,你可以这样做:

var fs = require('fs');
var feedParser = require('ortoo-feedparser')
var url = "http://iwnsvg.com/feed";
let titles = [];

feedParser.parseUrl(url)
  .on('article', function (article) {
    console.log('title; ', article.title);
    titles.push(article.title);
  })
  .on('end', function () {
    fs.writeFile('articles.json', JSON.stringify({ titles }), function (err) {
      if (err) {
        console.log(err);
      }
    });
  });

答案 2 :(得分:0)

fs.writeFile 附带一些选项,例如 flag 。写入的标志的默认值为 w ,因此您的数据将被新数据替换。

使用' a' 代替

{flag:'a'}

你会没事的。

但请不要忘记WriteFile或AppendFile是fs库中的上层,每次需要添加数据时都会打开和关闭文件。

最好使用 fs.createWriteStream 返回可写流(其他语言的可写文件句柄)。然后在需要在文件中写入数据时使用并重用此流。