【发布时间】:2021-06-09 23:23:17
【问题描述】:
我试图弄清楚为什么在找不到文档时不执行 if(!document),而是应用程序直接跳转到 catch 块并返回 500 状态?
为了澄清,通过 req.body.id 发送的 id 没有问题,如果我发送与数据库中的文档匹配的有效 ID,则执行成功块。问题是当我发送一个与文档不匹配的 ID 时,if (!document) {} 块不会被执行,而是会执行 catch 块。
我的意图是这样的(如果代码示例不够清楚的话):
如果未找到该文档,则返回: return res.status(401).json({ message: 'Unauthorized.' }
如果找到文档: return res.status(200).json({ message: 'Authorized.' });
如果出现数据库/服务器错误: return res.status(500).json({ message: 'Internal server error.' })
下面的小代码示例:
const login = (req, res) => {
userSchema
.findById(req.body.id)
.then((document) => {
if (!document) {
return res.status(401).json({ message: 'Unauthorized.' }).end();
}
return res.status(200).json({ message: 'Authorized.' });
})
.catch((err => return res.status(500).json({ message: 'Internal server error.' });
};
【问题讨论】:
-
console.log(req.body.id)紧跟在const login = (req, res) => {之后会告诉你你需要知道的一切。 -
旁注;从安全的角度来看,这感觉不安全。您的身份验证过程似乎仅基于传入有效用户记录 ID 的用户。用户身份验证令牌应该基于最终会过期的会话,而不是不会更改的用户记录 ID。
-
这只是一个简化的例子......
-
req.body.id 与此无关,只要发送的 id 正确,我可以毫无问题地检索电影。问题是为什么当我输入一个不正确的 id 时 if(!document) 没有被执行,而是 catch 块。
标签: javascript mongodb promise