我正在学习 NodeJS 并尝试抓取粉丝 wikia 以获取 Angular 色名称并将它们存储在 json 文件中。我有一个字符名称数组,我想遍历它们并从数组中的每个 url 中抓取每个字符名称。我遇到的问题是:
throw new Error('Can\'t set headers after they are sent.');
这是我目前的源代码:
var express = require('express');
var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');
var app = express();
app.get('/', function(req, res){
var bosses = ["Boss1","Boss2"];
for (boss in bosses) {
url = 'http://wikiasiteexample.com/' + bosses[boss];
request(url, function (error, response, html) {
if (!error) {
var $ = cheerio.load(html);
var title;
var json = { title: "" };
$('.page-header__title').filter(function () {
var data = $(this);
title = data.text();
json.title = title;
})
}
fs.writeFile('output.json', JSON.stringify(json, null, 4), {'flag':'a'}, function(err) {
if (err) {
return console.error(err);
}
});
res.send('Check your console!')
})
}
})
app.listen('8081')
console.log('Running on port 8081');
exports = module.exports = app;
最佳答案
您为您发出的每个请求调用 res.send()
。
您的 HTTP 请求只能有一个响应,因此会出错。
您必须恰好调用一次res.send()
。
Promises(和 Promise.all()
)将帮助您做到这一点。
关于javascript - NodeJS 多站点网络抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48505533/