Javascript Can';t在发送邮件后设置邮件头。NodeJS
下面是我的代码,我首先验证用户是否存在于组中,如果存在,则将帐户推入数组并保存。这是通过POST请求on/addaccount完成的Javascript Can';t在发送邮件后设置邮件头。NodeJS,javascript,node.js,express,mongoose,Javascript,Node.js,Express,Mongoose,下面是我的代码,我首先验证用户是否存在于组中,如果存在,则将帐户推入数组并保存。这是通过POST请求on/addaccount完成的 groupRouter.post('/addaccount', Verify.verifyOrdinaryUser, function(req, res, next) { Groups.findById(req.body.group, function(err,group) { if (err) next(err); var checkUser =
groupRouter.post('/addaccount', Verify.verifyOrdinaryUser, function(req, res, next) {
Groups.findById(req.body.group, function(err,group) {
if (err) next(err);
var checkUser = function(user) {
for(var i=0; i<group.users.length; i++)
{
if(group.users[i]==user)
return true;
}
return false;
}
if(checkUser(req.decoded._doc._id)){
User.find({mobile:{$in:req.body.split}}, function(err, users) {
if(err) next(err); var flag = true;
if(users.length == req.body.split.length ) {
for(var i=0; i<users.length; i++) {
if(!checkUser(''+users[i]._id)) {
flag = false;
break;
}
}
if(flag) {
var myObject = {};
myObject.amount = req.body.amount;
myObject.by = req.decoded._doc._id;
myObject.split = req.body.split;
group.accounts.push(myObject);
group.save(function (err, groups) {
if(err) next(err);
console.log('Added entries');
res.json(groups);
})
}
else
res.end('All users not in the group');
}
else
res.end('Split users do not exist');
})
}
else
res.end('No Permission');
})
})
我收到一个错误,错误是:发送邮件后无法设置邮件头。如下图所示
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11)
at ServerResponse.header (D:\Ionic\PocketBuddies\node_modules\express\lib\response.js:718:10)
at ServerResponse.send (D:\Ionic\PocketBuddies\node_modules\express\lib\response.js:163:12)
at done (D:\Ionic\PocketBuddies\node_modules\express\lib\response.js:957:10)
at Object.exports.renderFile (D:\Ionic\PocketBuddies\node_modules\jade\lib\index.js:374:12)
at View.exports.__express [as engine] (D:\Ionic\PocketBuddies\node_modules\jade\lib\index.js:417:11)
at View.render (D:\Ionic\PocketBuddies\node_modules\express\lib\view.js:126:8)
at tryRender (D:\Ionic\PocketBuddies\node_modules\express\lib\application.js:639:10)
at EventEmitter.render (D:\Ionic\PocketBuddies\node_modules\express\lib\application.js:591:3)
at ServerResponse.render (D:\Ionic\PocketBuddies\node_modules\express\lib\response.js:961:7)
at D:\Ionic\PocketBuddies\app.js:78:7
at Layer.handle_error (D:\Ionic\PocketBuddies\node_modules\express\lib\router\layer.js:71:5)
at trim_prefix (D:\Ionic\PocketBuddies\node_modules\express\lib\router\index.js:310:13)
at D:\Ionic\PocketBuddies\node_modules\express\lib\router\index.js:280:7
at Function.process_params (D:\Ionic\PocketBuddies\node_modules\express\lib\router\index.js:330:12)
at IncomingMessage.next (D:\Ionic\PocketBuddies\node_modules\express\lib\router\index.js:271:10)
我搜索了这个问题,它说我无法在res.end()之后更新响应,但我没有看到在调用I res.json时在这里调用任何res.end()。
请帮我找到一个问题。
我正在做一个项目,这个错误让我抓狂
提前感谢正如这里的问题正确指出的那样,错误没有返回,因此在group.save()函数中,在出现错误后,它呈现了错误页面,并命中了导致错误的res.json()。 如果没有错误,它可以正常工作。 如果发生错误,代码需要更新如下,以返回错误,而不是转到res.json()部分
这对我起到了作用,给了我一个实际的错误,然后必须在正确运行后纠正。第78行的
D:\Ionic\PocketBuddies\app.js中发生了什么?这触发了错误。此外,您还必须从当前作用域的每个调用位置返回next(err)
(因此if(err)return next(err)
)。我猜是发生了一个错误,你的应用程序正在呈现一个错误页面,但是因为你没有返回,代码也会点击res.json()
或res.end()
(触发错误)。第78行是我调用上面的group.save()的地方。同样感谢你的建议,我会用next()添加返回。是的,你是对的,它呈现了一个错误页面,然后还点击了res.json(),感谢您最终得到了实际的错误!!您的两个循环可以简化:var checkUser=userId=>group.users.includes(userId)
和var flag=users.every(user=>checkUser(user.\u id))代码>这也可以简化:group.accounts.push({amount:req.body.amount,by:req.decoded.\u doc.\u id,split:req.body.split})
只需插入一些换行符(不会在注释中显示)
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11)
at ServerResponse.header (D:\Ionic\PocketBuddies\node_modules\express\lib\response.js:718:10)
at ServerResponse.send (D:\Ionic\PocketBuddies\node_modules\express\lib\response.js:163:12)
at done (D:\Ionic\PocketBuddies\node_modules\express\lib\response.js:957:10)
at Object.exports.renderFile (D:\Ionic\PocketBuddies\node_modules\jade\lib\index.js:374:12)
at View.exports.__express [as engine] (D:\Ionic\PocketBuddies\node_modules\jade\lib\index.js:417:11)
at View.render (D:\Ionic\PocketBuddies\node_modules\express\lib\view.js:126:8)
at tryRender (D:\Ionic\PocketBuddies\node_modules\express\lib\application.js:639:10)
at EventEmitter.render (D:\Ionic\PocketBuddies\node_modules\express\lib\application.js:591:3)
at ServerResponse.render (D:\Ionic\PocketBuddies\node_modules\express\lib\response.js:961:7)
at D:\Ionic\PocketBuddies\app.js:78:7
at Layer.handle_error (D:\Ionic\PocketBuddies\node_modules\express\lib\router\layer.js:71:5)
at trim_prefix (D:\Ionic\PocketBuddies\node_modules\express\lib\router\index.js:310:13)
at D:\Ionic\PocketBuddies\node_modules\express\lib\router\index.js:280:7
at Function.process_params (D:\Ionic\PocketBuddies\node_modules\express\lib\router\index.js:330:12)
at IncomingMessage.next (D:\Ionic\PocketBuddies\node_modules\express\lib\router\index.js:271:10)
group.save(function (err, groups) {
if(err) return next(err);
console.log('Added entries');
res.json(groups);
})