【发布时间】:2015-11-09 06:30:02
【问题描述】:
我正在学习使用nodejs进行流式传输,我了解request npm module中显示的示例;
request(url).pipe(fs.createWriteStream('./filename.json'))
但我的问题有两个部分。
案例 1:
function fetchSitemaps() {
return requestAsync(url).then(data => {
const $ = cheerio.load(data);
let urls = [];
$("loc").each((i, e) => urls.push($(e).text()));
fs.writeFileSync('./sitemaps.json', JSON.stringify(urls))
})
}
我想将以上内容从writeFileSync 转换为createWriteStream,但是如何继续将数据附加到JSON 格式的数组中?
案例 2:
function fetchLyricUrls() {
let sitemaps = JSON.parse(fs.readFileSync('./sitemaps.json'));
sitemaps.forEach((sitemap, i) => {
let fileName = i + '.json';
if(url_pat.exec(sitemap)) {
fileName = url_pat.exec(sitemap)[1] + '.json';
}
requestAsync(url).then(data => {
const $ = cheerio.load(data);
let urls = [];
$("loc").each((i, e) => urls.push($(e).text()));
return urls;
}).then(urls => {
let allUrls = [];
urls.map(u => {
return requestAsync(u).then(sm => {
const $ = cheerio.load(sm);
$("loc").each((i, e) => allUrls.push($(e).text()))
fs.writeFileSync('./lyrics.json', JSON.stringify(allUrls))
return allUrls;
});
});
});
});
}
问题的第一部分是相同的,使用 writeStream 附加到 json 数据,但是这一次,我想解析 html 数据并获取一些文本,我想使用流而不是 html 数据作为一个整体。
【问题讨论】:
-
好像你需要一个转换流?像这样的例子:codewinds.com/blog/…