Node.js setheader给出了错误:“引用”;抛出新错误(';无法在发送标头后设置标头。';)&引用;
检查用户是否已投票时出现此错误。我建议Node.js setheader给出了错误:“引用”;抛出新错误(';无法在发送标头后设置标头。';)&引用;,node.js,express,sails.js,Node.js,Express,Sails.js,检查用户是否已投票时出现此错误。我建议setheader事情有责任 代码 index : function(req, res, next){ if(req.method == "POST"){ var aa = Users.findOneByEmail(req.param('email'), function(err, data, next){ if(err) res.serverError(err); console.
setheader
事情有责任
代码
index : function(req, res, next){
if(req.method == "POST"){
var aa = Users.findOneByEmail(req.param('email'), function(err, data, next){
if(err) res.serverError(err);
console.log(data);
if(data){
res.redirect('/users');
return;
}
});
var data = {
remoteip: req.ip,
challenge: req.body.recaptcha_challenge_field,
response: req.body.recaptcha_response_field
};
// console.log(data);
var recaptcha = new Recaptcha(PUBLIC_KEY, PRIVATE_KEY, data);
recaptcha.verify(function(success, error_code) {
if(!success){
return res.serverError(error_code)
} else {
var username = req.param('username');
var vote = req.param('vote');
var email = req.param('email');
var reason = req.param('reason');
console.log('I am here 2');
Users.create({
username: req.param('username'),
email: email,
candidate_id : vote,
reason : reason
}).done(function(err, data){
if(err){
return res.serverError(JSON.stringify(err));
} else {
return res.send('You sucessfully voted');
}
});
}
res.redirect('/candidates/');
});
} else {
var recaptcha = new Recaptcha(PUBLIC_KEY, PRIVATE_KEY);
Candidates.find().done(function(err, data){
res.view({candidates : data, recaptcha_form: recaptcha.toHTML()});
});
}
},
错误:
http.js:691
throw new Error('Can\'t set headers after they are sent.');
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (http.js:691:11)
at ServerResponse.res.setHeader (/usr/local/lib/node_modules/sails/node_modules/express/node_modules/connect/lib/patch.js:59:22)
at ServerResponse.res.set.res.header (/Users/korotane/Documents/node_projects/the_next_indian_pm/node_modules/sails/node_modules/express/lib/response.js:522:10)
at ServerResponse.res.location (/Users/korotane/Documents/node_projects/the_next_indian_pm/node_modules/sails/node_modules/express/lib/response.js:656:8)
at ServerResponse.res.redirect (/Users/korotane/Documents/node_projects/the_next_indian_pm/node_modules/sails/node_modules/express/lib/response.js:698:8)
at /Users/korotane/Documents/node_projects/the_next_indian_pm/api/controllers/UsersController.js:75:14
at IncomingMessage.<anonymous> (/Users/korotane/Documents/node_projects/the_next_indian_pm/node_modules/recaptcha/lib/recaptcha.js:160:20)
at IncomingMessage.EventEmitter.emit (events.js:117:20)
at _stream_readable.js:920:16
at process._tickDomainCallback (node.js:459:13)
http.js:691
抛出新错误('发送头后无法设置头');
错误:发送邮件后无法设置邮件头。
位于ServerResponse.OutgoingMessage.setHeader(http.js:691:11)
在ServerResponse.res.setHeader(/usr/local/lib/node_modules/sails/node_modules/express/node_modules/connect/lib/patch.js:59:22)
在ServerResponse.res.set.res.header(/Users/korotane/Documents/node_projects/the_next_indian_pm/node_modules/sails/node_modules/express/lib/response.js:522:10)
在ServerResponse.res.location(/Users/korotane/Documents/node_projects/the_next_indian_pm/node_modules/sails/node_modules/express/lib/response.js:656:8)
在ServerResponse.res.redirect(/Users/korotane/Documents/node_projects/the_next_indian_pm/node_modules/sails/node_modules/express/lib/response.js:698:8)
at/Users/korotane/Documents/node_projects/the_next_indian_pm/api/controllers/userscocontroller.js:75:14
在收到消息时。(/Users/korotane/Documents/node_projects/the_next_indian_pm/node_modules/repactcha/lib/repactcha.js:160:20)
在IncomingMessage.EventEmitter.emit(events.js:117:20)
at_stream_readable.js:920:16
在进程中。_tickDomainCallback(node.js:459:13)
看看第4行:
问题是,res.serverError
已经发送了头,因此由于您没有中断对它的执行,以下任何调用都可能导致错误:res.serverError,res.send,res.redirect
在您的特殊情况下,它是重定向。回溯中的对应行:
...
at ServerResponse.res.redirect (/Users/korotane/Documents/node_projects/the_next_indian_pm/node_modules/sails/node_modules/express/lib/response.js:698:8)
...
长话短说,快速修复方法是将return
添加到第四行:
if (err) return res.serverError(err);
也就是说,不能保证其他所有功能都能无缝工作。在复杂的代码中,只要您想在许多情况下发送响应 你可以检查res.headersSent是否为false IE:if(res.headerssend){res.send()} 如果您在发送响应之前使用了“return”,则代码将不会进一步执行。可能重复
if (err) return res.serverError(err);