Node.js 突然,在我的登录名nodejs上未定义密码

Node.js 突然,在我的登录名nodejs上未定义密码,node.js,authentication,Node.js,Authentication,我正在处理项目中的一些其他事情,当我返回到登录屏幕时,我遇到了一个错误: 如果(!results | |!(等待bcrypt.compare)(密码,结果[0] (1.密码) TypeError:无法读取未定义的属性“password” 我已经阅读了我的代码好几次,我不明白问题出在哪里,有人知道它可能是什么吗 console.log(results)为我带来了一个[]正如预期的那样,因为我输入了一个无效的用户进行测试。奇怪的是,当输入的登录正确时,用户已通过身份验证,当用户未键入电子邮件或密码时

我正在处理项目中的一些其他事情,当我返回到登录屏幕时,我遇到了一个错误:

如果(!results | |!(等待bcrypt.compare)(密码,结果[0] (1.密码)

TypeError:无法读取未定义的属性“password”

我已经阅读了我的代码好几次,我不明白问题出在哪里,有人知道它可能是什么吗

console.log(results)为我带来了一个[]正如预期的那样,因为我输入了一个无效的用户进行测试。奇怪的是,当输入的登录正确时,用户已通过身份验证,当用户未键入电子邮件或密码时,屏幕上会显示预期消息,通知信息缺失。仅当用户不正确时,身份验证不起作用,并且出现消息“密码未定义”

我的登录代码如下:

exports.login =  (req, res) => {
try {
    const{email, password} = req.body;

   
  

    if(!email || !password){
        res.clearCookie('myEmail');
        return res.status(400).render('login',{
            message:"A senha ou o e-mail precisa ser preenchido"
            
        })
        
    }
    db.query('SELECT * FROM users2 WHERE email = ?' , [email], async(error,results) =>{
        console.log(results);
        if(!results || !(await bcrypt.compare(password,results[0].password))){
            res.clearCookie('myEmail');
            res.status(401).render('login', {
                message:'Email or password is incorrect'
                
                
            })
        }else{
            const id= results[0].id;
            const token = jwt.sign({id: id}, process.env.JWT_SECRET,{
                expiresIn:process.env.JWT_EXPIRES_IN
                
            });
            console.log("the token is"+token)
            const cookieOptions ={
                expires: new Date(
                    Date.now()+process.env.JWT_EXPIRES *24*60*60*1000

                ),
                httpOnly:true
            }
            res.cookie('jwt',token,cookieOptions);
            
            res.status(200).redirect("/userPage")

        }
    })
} catch (error) {
    console.log(error)
}





}
重定向

router.get('/login',loggedUser,(req,res) =>{

res.render('login')
})

登录路由器中使用的loggedUser函数:

function loggedUser(req,res,next){
if(req.cookies['myEmail']!=null){
    res.redirect('userPage')
}
        return next()

}

您使用的是JSON中间件吗?app.use(express.json())默认情况下,express不会解析内容。我确实在app.js中使用了它,但出现问题的文件不是app.js。不过,我发现了错误。问题是,由于某些原因,node没有将空数组视为null,如果有人不在mysql中,尝试登录可能会导致错误。我在测试密码之前处理了这个问题,就是这样。谢谢你的回复