调用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被忽略了,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

C语言-if语句问题

if语句总是在字符串比较时返回false [重复]

比较 Mongoose 对象 ID 时,if 语句在 Jade 中不起作用

java if语句

流程控制:ifwhilefor语句

从前一个控制器重定向时未调用 Post 方法