Node.js 即使提供了正确的详细信息,用户登录也会失败
使用http端点,并尝试通过使用用户的电子邮件搜索数据库登录用户。用户密码被哈希。当提供的电子邮件不在数据库中时,它将返回200个状态码,但不包含任何信息 我已经尝试过自定义函数来检查用户obj是否为空。即使在这里,obj也不是空的。即使提供了正确的详细信息,Catch块仍在执行Node.js 即使提供了正确的详细信息,用户登录也会失败,node.js,Node.js,使用http端点,并尝试通过使用用户的电子邮件搜索数据库登录用户。用户密码被哈希。当提供的电子邮件不在数据库中时,它将返回200个状态码,但不包含任何信息 我已经尝试过自定义函数来检查用户obj是否为空。即使在这里,obj也不是空的。即使提供了正确的详细信息,Catch块仍在执行 Router.post("/users/login", async (req, res) => { try { const user = await User.findByCredentials(re
Router.post("/users/login", async (req, res) => {
try {
const user = await User.findByCredentials(req.body.email, req.body.password)
res.send(user)
} catch (error) {
res.status(400).send(error)
}
})
userSchema.statics.findByCredentials = async (email, password) => {
const user = User.findOne({ email: email })
if (!user) {
throw new Error("Unable to login")
}
const isMatch = await bcrypt.compare(password, user.password)
if (!isMatch) {
throw new Error("Unable to login")
}
return user
}
预期输出为用户。实际输出为空,状态代码为400。您的问题似乎是由以下行引起的:
const user = User.findOne({email : email})
而且,因为您没有等待它或传递回调,它会返回一个猫鼬承诺
然后
由于您正在比较函数和字符串,因此计算结果始终为false
!isMatch
计算结果为true,这意味着您将始终抛出
错误(“无法登录”)
您的问题似乎是由以下行引起的:
const user = User.findOne({email : email})
而且,因为您没有等待它或传递回调,它会返回一个猫鼬承诺
然后
由于您正在比较函数和字符串,因此计算结果始终为false
!isMatch
计算结果为true,这意味着您将始终抛出
错误(“无法登录”)
您需要将错误对象的内容发布到catch块内。您需要将错误对象的内容发布到catch块内。感谢您的响应。我刚刚发现,在我发布问题后,当你说抛出不起作用时-你的意思是它从未进入if(!isMatch)
块吗?即使(!user)它正在执行catch块,其中包含用于响应的空对象。我刚刚发现,在我发布问题后,当你说抛出不起作用时-你的意思是它从未进入if(!isMatch)
块吗?即使(!user)它正在执行带有空obj的catch块也是如此