使用nodejs进行测试时,得到一个未处理的PromiseRejectionWarning



我正在测试一个登录/注册页面。尽管注册部分工作正常,但当尝试使用相同的用户凭据登录时,页面根本没有响应。在控制台上,尽管使用了try-catch块,我还是收到了一个"UnhandledPromiseRejectionWarning"。

(节点:8248(未处理的PromiseRejection警告:未处理的promise拒绝。此错误源于在没有catch块的异步函数内部抛出,或拒绝未使用.catch((处理的promise。要在未处理的prompt拒绝时终止节点进程,请使用CLI标志--unhandled-rejections=strict(请参阅https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。(拒绝id:1(

(节点:8248([DEP0018]不推荐使用警告:不推荐使用未经处理的承诺拒绝。将来,未处理的promise拒绝将使用非零退出代码终止Node.js进程。

exports.login = async(req, res) => {
try {
const { email, password } = req.body;
if (!email || !password) {
return res.status(400).render('login', {
message: "PLEASE PROVIDE AN EMAIL AND/OR PASSWORD"
})
}
db.query('SELECT * FROM users WHERE email = ?', [email], async(error, results) => {
console.log(results);
if (!results || !(await bcrypt.compare(password, results[0].password))) {
res.status(401).render('login', {
message: 'EMAIL OR PASSWORD IS INCORRECT'
})
} else {
const id = results[0].id;
const token = jwt.sign({ 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_COOKIE_EXPIRES * 24 * 60 * 60 * 1000 
),
httpOnly: true
}
res.cookie('jwt', token, cookieOptions);
res.status(200).redirext("/");
}
})
} catch (error) {
console.log(error);
}
}

任何形式的援助都会有很大帮助。谢谢!:(

首先,发送响应时出现错误:

res.status(200).redirect("/");

注:x->c

那么您就没有条件检查bcrypt.compare是否会导致错误。

尝试以下代码:

exports.login = async(req, res) => {
const { email, password } = req.body;
if (!email || !password) {
return res.status(400).render('login', {
message: "PLEASE PROVIDE AN EMAIL AND/OR PASSWORD"
})
}
db.query('SELECT * FROM users WHERE email = ?', [email], async(error, results) => {
console.log(results);
try {
if (!results || !(await bcrypt.compare(password, results[0].password))) {
res.status(401).render('login', {
message: 'EMAIL OR PASSWORD IS INCORRECT'
})
} else {
const id = results[0].id;
const token = jwt.sign({ 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_COOKIE_EXPIRES * 24 * 60 * 60 * 1000 
),
httpOnly: true
}
res.cookie('jwt', token, cookieOptions);
res.status(200).redirect("/");
}
} catch (error) {
console.log(error);
}

})
}

相关内容

最新更新