2017-03-29 44 views
3

我在嘗試使用node.js寫入一個文件。問題是,它沒有寫出所有的飼料,只有最後一個。寫入文件只寫入最後一個項目,而不是所有項目,爲什麼?

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

只需將fs.writeFile(改爲fs.appendFile(即可。

fs.writeFile每次調用時都會覆蓋文件,而fs.appendFile會添加到文件中。

0

由於@羅伯特說你應該使用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); 
     } 
    }); 
    }); 
0

fs.writeFile帶有像標誌一些選項。標誌的默認值是w用於寫入,所以您的數據將被新的替換。

使用'A' 代替

{flag:'a'} 

,你會沒事的。

但是不要忘記,WriteFile或AppendFile是fs庫中的上層,它在每次需要添加數據時打開和關閉文件。

優選地,使用fs.createWriteStream,其返回可寫入的流(其他語言的可寫入文件句柄)。然後在需要在文件中寫入數據時使用並重新使用此流。

相關問題