繁体   English   中英

发送后无法设置标题-NodeJS

[英]Can't Set Headers After they are sent - NodeJS

我有一个节点js应用程序,并且得到的路线之一一直是“发送错误后无法设置标头”。

路线的作用:

我的应用程序中的用户具有特定的访问级别,因此此路由通过用户的accessLevel数组并找到该路由的适当访问级别。 并且根据呼叫该路由的用户的访问级别,它会执行不同的操作。

编码:

app.post('/bios/approve', isLoggedIn, function(req, res) {

for (var i = 0; i < req.user.accessLevel.length; i++) {
    if (req.user.accessLevel[i] === "Bio Officer") {

        Bio.findOneAndUpdate({userID: req.body.userID, bioForSector: req.body.bioForSector}, {
            background: req.body.background,
            experience: req.body.experience,
            skills: req.body.skills,
            bioStatus: req.body.bioStatus
        }, function(err, editedBio) {

            if (err)
                console.log("Error while editing Pending Bio is " + err);

            else if (editedBio) {
                User.findOneAndUpdate({accessLevel: "Bio Designer"}, {
                    $push: {biosPending: editedBio._id}
                }, function(err, user) {

                    if (err) {
                        console.log("The error while finding lineManager is " + err);
                    } else if (user) {User.findOneAndUpdate({accessLevel: "Bio Officer"}, {
                            $pull: {
                                biosPending: editedBio._id
                            }
                        }, function(err, bioOfficer) {
                            if (err) {
                                console.log("The error while finding lineManager is " + err);
                            }
                            res.json("Bio Done!")
                        });

                    }
                });

            }

        });

    } else if (req.user.accessLevel[i] === "Bio Designer") {
        // Currently Empty

    } else {

        Bio.findOneAndUpdate({userID: req.body.userID,bioForSector: req.body.bioForSector}, {
            background: req.body.background,
            experience: req.body.experience,
            skills: req.body.skills,
            bioStatus: req.body.bioStatus
        }, function(err, editedBio) {

            if (err)
                console.log("Error while editing Pending Bio is " + err);

            else if (editedBio) {
                User.findOneAndUpdate({accessLevel: "Bio Officer"}, {$push: {biosPending: editedBio._id}
                }, function(err, user) {

                    if (err) {
                        console.log("The error while finding lineManager is " + err);
                    } else if (user) {

                        User.findOneAndUpdate({email: editedBio.lineManagerEmail}, {$pull: {biosPending: editedBio._id}
                        }, function(err, bioOfficer) {

                            if (err) {
                                console.log("The error while finding lineManager is " + err);
                            }
                            res.json("bio Done!")
                        });

                    }
                });

            }
        });
    }
}
});

任何帮助将不胜感激。 有人知道我在做什么错吗?

Can't Set Headers After they are sent

表示您针对一个请求多次发送响应。

从您的代码,我可以建议是:

for (var i = 0; i < req.user.accessLevel.length; i++) {
     if(--req.user.accessLevel.length == 0){
        res.json("Bio Done!")
     }
}

首先尝试添加res.End(); 在res.json()之后。 如果这不起作用,请添加代码“ isLoggedIn”吗?

每次发送回响应时,也应该使用return字。 您要返回以确保在执行该行之后没有任何代码,然后再次意外发送另一个响应。

例如:传return res.json("bio Done!")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM