Javascript Can';t在发送邮件后设置邮件头。NodeJS

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 =

下面是我的代码,我首先验证用户是否存在于组中,如果存在,则将帐户推入数组并保存。这是通过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 = 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);
                })