Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 错误:can';t在发送邮件后设置邮件头_Node.js_Express - Fatal编程技术网

Node.js 错误:can';t在发送邮件后设置邮件头

Node.js 错误:can';t在发送邮件后设置邮件头,node.js,express,Node.js,Express,我想发送一个带有res.redirect()的参数。但是,我在运行它时遇到了一个错误,说我无法在发送头之后设置头 这意味着什么,我该如何修复它 app.post('/updateCollaborateRequest', function(req,res) { if(req.body.accept == true) { Team.findOne({'name': req.body.data.teamName}, function (err, team) {

我想发送一个带有
res.redirect()
的参数。但是,我在运行它时遇到了一个错误,说我无法在发送头之后设置头

这意味着什么,我该如何修复它

app.post('/updateCollaborateRequest', function(req,res) {
    if(req.body.accept == true) {
        Team.findOne({'name': req.body.data.teamName}, function (err, team) {
            if(err) {
                res.redirect('/explore');
            }
            team.accepted = true;
            team.save(function (err) {
                if (err) {
                    alert(err);
                }
                Request.findOne({'emailAdmin': req.session.email}, function(err, request) {
                    request.seen = true;
                    request.save(function(err) {
                        if(err) {
                            console.log(err);
                        }
                    });
                });
                res.redirect("/teamprof/" + team.name);
            });
        });
    }
    Request.findOne({'emailAdmin': req.session.email}, function(err, request) {
        request.seen = true;
        request.save(function(err) {
            if(err) {
                console.log(err);
            }
            res.render('userprof1', {message : req.flash('done')});
        });
    });
});

您的代码在重定向后继续。这可能就是问题所在。您应该返回,否则将继续尝试写入HTTP响应。

此特定错误消息是由导致多次尝试发送响应的
res.xxx()
调用的代码路径引起的

你可以在多个地方这样做。例如,在
Team.findOne()
回调中有两个
res.redirect()
调用,但随后继续执行
Request.findOne()
,其中有一个
res.render()
。您必须确保只发送一次响应

我不完全确定在所有情况下所需的逻辑是什么,但您可以通过在
Request.findOne()
之前添加
else
语句,并在每个
res.redirect()之后添加
return
来修复该错误。如果这不是您想要的确切流程,那么请详细解释您希望控制流程如何工作。以下是应用这些更改的代码:

app.post('/updateCollaborateRequest', function(req,res) {
    if(req.body.accept == true) {
        Team.findOne({'name': req.body.data.teamName}, function (err, team) {
            if(err) {
                res.redirect('/explore');
                return;
            }
            team.accepted = true;
            team.save(function (err) {
                if (err) {
                    // FIXME: need error handling here
                    alert(err);
                }
                Request.findOne({'emailAdmin': req.session.email}, function(err, request) {
                    request.seen = true;
                    request.save(function(err) {
                        if(err) {
                            // FIXME: need error handling here
                            console.log(err);
                        }
                    });
                });
                // Are you sure you want to send this response before
                // you even know if the `Request.findOne()` and `request.save()` 
                // have been sucessful?
                res.redirect("/teamprof/" + team.name);
                return;
            });
        });
    } else {
        Request.findOne({'emailAdmin': req.session.email}, function(err, request) {
            request.seen = true;
            request.save(function(err) {
                if(err) {
                    console.log(err);
                }
                res.render('userprof1', {message : req.flash('done')});
            });
        });
    }
});    

您仍然存在一些错误情况,没有发送响应,这是不完整的错误处理,因此这些情况也需要修复。此外,我还在代码中添加了一些关于代码中其他可疑内容的注释。

除了这篇文章中被删掉的真正不可接受的乞讨之外,我注意到下面有两个答案仍然没有重复。当时他们有没有帮过你?我知道你已经-请允许我鼓励你与你收到的有用答案互动。值得考虑的是,这个网站的成功与否取决于它的社区精神以及它的游戏化。嗨,哈弗,我为我使用论坛提问的方式道歉。我当然不知道如何在stackoverflow提问,下次我会尽量记住这些问题。就我记忆所及,在这个问题上,这两个答案对我都没有帮助,而且已经很长时间了,所以我不知道当时正确的解决方案是什么。我可能会在这里说些显而易见的话,但他们试图帮助你,与他们互动、回复或投票支持努力是正常的。我认为这对Stack Overflow一点也不特别——表达感激之情难道不是普通人际交往的一部分吗?就我所记得的,他们试图帮助我,但还有别的办法解决了这个问题。还有你对回复的关注,我被这个项目抓住了,因为这是我最后一年的项目,所以忘了回复。