javascript - 发送后无法设置 header - NodeJS

标签 javascript node.js http express http-headers

我有一个 Node js 应用程序,并且我不断收到“发送错误后无法设置 header ”的路由之一。

路线的作用:

我的应用中的用户具有特定的访问级别,因此此路由会遍历用户 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!")
     }
}

关于javascript - 发送后无法设置 header - NodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38117184/

相关文章:

javascript - 如何从 Controller 选择插件中选择多个值

javascript - Django-REST 和 AngularJS 中的变量名称

javascript - 如何仅替换元素上的文本内容?

ruby-on-rails - 放与幂等

xml - 为 FedEx Web 服务创建 HTTP Post 调用

javascript - NodeJS 和 MySQL 中标记系统的 3 个表更新的最佳方法

node.js - 蒙哥错误: database names cannot contain the character ' ' when using mongoosejs connect to mLab

node.js - save()后重新加载对象

javascript - 在 Meteor.js 中查找当前 session ID

php - 如何将 HTTP header /正文与 PHP 套接字请求隔离开来