调用post方法时,密码对应时进入if语句,但是我在if语句中的res被忽略了,为啥?
Posted
技术标签:
【中文标题】调用post方法时,密码对应时进入if语句,但是我在if语句中的res被忽略了,为啥?【英文标题】:when calling post method it enters the if statement when the password corresponds, but my res in the if statement is ignored, why?调用post方法时,密码对应时进入if语句,但是我在if语句中的res被忽略了,为什么? 【发布时间】:2020-05-05 04:07:55 【问题描述】:我是nodejs的新手,我正在尝试制作一个登录系统。这是我的登录帖子:
login post code
它进入 if 语句(这意味着密码对应)但我的 Res.status 被忽略。我正在使用邮递员来查看它是否有效,并将其他 Res.status 从 if 语句中返回。下一张图片显示:
【问题讨论】:
【参考方案1】:在您的代码中,您调用finally
,无论身份验证成功还是错误,都会调用它。尝试删除对finally
的调用。
为什么在 then/catch 之前调用了您的 404 代码?因为它不在 finally 回调中,而只是在 post 处理程序中调用。
如果你想这样编码:
finally( () => res.status(400).json(...) )
它将在 then/catch 之后调用。你的代码以前让它发生过。它在 Promise 被解决或拒绝之前被评估。
看下面的例子
function sendError()
...
getUser()
.then(response => ...)
.catch(err => ... )
.finally( sendError() );
在我的示例中,sendError
总是在 getUser() 之前调用。在您的代码中也是如此。
不过,如果您在 finally
的回调中正确执行此操作,则会引发错误,因为响应已发送。
希望清楚
【讨论】:
router.post('/login', async (req, res) => User.find( username: req.body.username).exec() .then( utilizador=> utilizador.forEach(element => if(passwordHash.verify(req.body.password, element.password)) console.log('utilizador logado'); res.status(200).json( message:' logado' ); console.log('utilizador logado'); ); ) .catch(err=> res.status(500).end(); ) res.status(404).json( message: 'erro de autenticacao'); ) 这样?仍然出现同样的错误,感谢您的帮助 我的意思是删除整个 res.status(404).json(...) 所以它可以工作,但我有点困惑,为什么它运行最后一个 res ?我认为当输入 if 语句时,它会给出 res (200) 并离开,为什么它会在最后一个 res 上先行并离开?这有点令人困惑。感谢您的帮助,非常感谢! 好的,我又看了一遍代码,会解释的。我将编辑答案以添加说明以上是关于调用post方法时,密码对应时进入if语句,但是我在if语句中的res被忽略了,为啥?的主要内容,如果未能解决你的问题,请参考以下文章