Node.js 错误:Can';t在循环多个请求中发送头后设置头

Node.js 错误:Can';t在循环多个请求中发送头后设置头,node.js,express,Node.js,Express,我是nodejs的初学者,我在循环中请求多个url时遇到了一个问题,然后我呈现了它 错误:发送邮件后无法设置邮件头 at validateHeader (_http_outgoing.js:491:11) at ServerResponse.setHeader (_http_outgoing.js:498:) router.get('/', function(req, res, next) { setInterval(function(){ request(

我是nodejs的初学者,我在循环中请求多个url时遇到了一个问题,然后我呈现了它

错误:发送邮件后无法设置邮件头

at validateHeader (_http_outgoing.js:491:11)

at ServerResponse.setHeader (_http_outgoing.js:498:)


router.get('/', function(req, res, next) {
  setInterval(function(){

             request(url1,function (error,response,body) {
                 var data1 = JSON.parse(body);

                 request(url2+data1.access_token,function (error,response,body) {
                 var data_info = JSON.parse(body);

                                   //error when it render
                               res.render('index', {data_info : data_info});
                            })
                        })
          },5000);
});

这不完全是一个循环,我理解你的意思是用
setInterval()
重复调用同一个函数

使用
res.render()
发送第一个响应后,完成该请求的响应过程,随后尝试使用该
res
对象失败

如果您想在5秒内将数据发送到客户端,您可能应该查看或将
setInterval()
调用传递给客户端,以便客户端每5秒轮询一次服务器,在这种情况下,服务器代码可以更改为:

router.get('/', (req, res) => {
  request(url1, (error, response, body) => {
    const data1 = JSON.parse(body);
    request(`${url2}${data1.access_token}`, (error, response, body) => {
      const data_info = JSON.parse(body);
      res.render('index', { data_info });
    });
  });
});
你可以利用

const async = require('async');
router.get('/', function (req, res, next) {
   async.waterfall([
       function(callback) {
           request(url1, function (error,response,body) {
               if(err) {
                   callback(err)
               }else {
                    var data1 = JSON.parse(body);
                    callback(data1)
               }

           }) 
       },
       function(data1, callback) {
           request(url2+data1.access_token, function(error,response,body) {
                if(err) {
                   callback(err)
               }else {
                   var data_info = JSON.parse(body);
                    callback(null, data_info)
               }
           }) 
       }
   ], function(err, result) {
       if(err) {
           res.json({success: false, error: err, message: "Something went wrong.!"})
       }else {
            res.render('index', {
                data_info : result
            });
       }
   })
})