NodeJS多站点网络刮

时间:2018-01-29 16:12:31

标签: javascript json node.js

我正在学习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;

1 个答案:

答案 0 :(得分:2)

您为每个请求致电res.send()

您的HTTP请求只能有一个响应,因此会出错。

您必须恰好致电res.send()一次 承诺(和Promise.all())将帮助您实现这一目标。