Node.js 错误:Can';t在循环多个请求中发送头后设置头
我是nodejs的初学者,我在循环中请求多个url时遇到了一个问题,然后我呈现了它 错误:发送邮件后无法设置邮件头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(
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
});
}
})
})