【问题标题】:Error [ERR_HTTP_HEADERS_SENT] while looping through request循环请求时出现错误 [ERR_HTTP_HEADERS_SENT]
【发布时间】:2018-07-14 00:30:22
【问题描述】:

我正在构建一个网络抓取 api,用于从页面中取回所有工作链接。当我尝试使用 res.send - 发送结果 - 这是所有工作链接的简单文本时,我不断收到“错误 [ERR_HTTP_HEADERS_SENT]:无法设置标头后发送到客户端”...我我猜我 res.send 的工作方式有问题......

    var express = require('express');
    var app = express();
    var request = require('request');
    var cheerio = require('cheerio');
    var url = 'https://www.pardes-hanna-karkur.muni.il/';

    app.get('/webscrape', function (req, res,next) {
    
    request(url, function(error, response, body){

      if(!error && response.statusCode == 200){
            $ = cheerio.load(body);
          links = $('a'); //jquery get all hyperlinks
      $(links).each(function(i, link){
        var linkRecieved = $(link).attr('href');
        if (linkRecieved.indexOf('www') > -1){
          var outStr='';
          request(linkRecieved, function(error, response, body){
            if(!error && response.statusCode == 200){
              res.send(linkRecieved);
              next();
              
            } else {
              res.send('false');
              next();
            }
          });
          
        }
        
      });

      }
      
    });

    })

    var server = app.listen(8081, function () {
      var host = server.address().address
      var port = server.address().port
      
      console.log( port)
    })

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    发生这种情况是因为您只能为请求发送一次响应,在您的代码上,它会尝试在每次循环执行时发送响应而没有错误,尝试从外部循环发送响应

    【讨论】:

    • 谢谢,我尝试在 get 请求开始时创建一个 emapy 数组 - 收集所有响应......并在 get 请求结束时发送它......但是它什么也没返回
    猜你喜欢
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    相关资源
    最近更新 更多