在使用 Passport.js、 Express 和 Mongoose 时,我在 NodeJS 中遇到了这个奇怪的问题。基本上,我得到一个错误说“不能设置标题后,他们被发送到客户端”,即使我没有发送一个以上的标题。
我读过其他的帖子,也试用过,但没有一个奏效。
我仔细研究了 Github 的问题,似乎找不到解决办法。我得到的问题是,当我发送多个响应标头时会触发此错误,但事实是,我没有发送多个标头。感觉怪怪的。
这是我的堆栈跟踪:
(节点: 9236) DerecationPolice: 当前 URL 字符串解析器已被弃用,将在将来的版本中删除。若要使用新的解析器,请将选项{ useNewUrlParser: true }传递给 MongoClient.connect。
在端口5000上运行的服务器
MongoDB 连接错误
[ ERR _ HTTP _ HEADERS _ SENT ] : 在将标头发送到 客户
在 validateHeader (_ http _ out. js: 503:11)
在 ServerResponse.setHeader (_ http _ out. js: 510:3)
在 ServerResponse.header (/Users/lourdesroashan/code/github/devlog/node _ module/Express/lib/response. js: 767:10)
在 ServerResponse.json (/Users/lourdesroashan/code/github/devlog/node _ module/Express/lib/response. js: 264:10)
在 Profile.findOne.then.profile (/Users/lourdesroashan/code/github/devlog/ways/api/profile.js: 27:30)
在 < 匿名 >
这是我的服务器代码:
router.get("/userprofile", passport.authenticate('jwt', { session: false }), (req, res) => {
Profile.findOne({ user: req.user.id }).then(profile => {
if (!profile) {
return res.status(404).json({ error: "No Profile Found" });
}
else {
res.json(profile);
}
}).catch(err => {
console.log(err);
})
});
我知道这个错误意味着什么,但是据我所知,我不认为我发送了多个头,我甚至通过 console.log 检查只有一个块运行。
提前谢谢你! :)
完整密码: https://github.com/lourdesr/devlog
编辑:
我想通了。在我的 passport.js 中,当试图获得认证用户时,出现了一个问题。我忘了在“ done”方法上使用“ return”,这导致了这个问题。刚刚添加了返回语句,它工作了!