我正在学习NodeJS并试图抓住粉丝wikia来获取字符的名称并将它们存储在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;
答案 0 :(得分:2)
您为每个请求致电res.send()
。
您的HTTP请求只能有一个响应,因此会出错。
您必须恰好致电res.send()
一次
承诺(和Promise.all()
)将帮助您实现这一目标。