【发布时间】:2021-09-03 17:28:37
【问题描述】:
我正在尝试创建一个简单的登录验证,但是当我通过邮递员故意在登录发布方法中输入错误的电子邮件时,我收到了这个错误。
UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'password' of null at C:\Users\layug\Documents\work\zuitt\batch-125\s32 -36\course-booking-api\controllers\userControllers.js:54 :74 在 processTicksAndRejections (internal/process/task_queues.js:95:5)
当邮箱正确,密码错误时,我会收到错误的邮箱或密码信息错误信息。
问题是电子邮件不正确,或者在数据库中找不到电子邮件(通过“结果”变量)。在这些情况下,它开始在控制台中显示错误。
我使用的代码如下。
module.exports.login = (reqBody) => {
// model method
return User.findOne({email: reqBody.email}).then((result, error) => {
// This is the line causing the error.
const isPasswordCorrect = bcrypt.compareSync(reqBody.password, result.password);
if (result == null || isPasswordCorrect == false) {
return "Email or password is incorrect";
} else {
return {access: auth.createAccessToken(result.toObject())};
}
});
}
当我这样写条件时,一切正常,但这不是我登录验证的理想条件。
module.exports.login = (reqBody) => {
return User.findOne({ email: reqBody.email }).then((result, error) => {
if (result == null) {
return "Email not registered";
} else {
const isPasswordCorrect = bcrypt.compareSync(reqBody.password, result.password);
if (isPasswordCorrect === true) {
return { access: auth.createAccessToken(result.toObject()) };
} else {
return "Wrong password";
}
}
});
}
【问题讨论】:
-
你向
login函数传递了什么? -
这可能是因为访问了
reqBody.password,其中请求正文中的password属性为空。试试你是否可以在你的代码中使用可选链(ES2020),这将是reqBody?.password。如果不是,请检查密码属性是否明确为空。 -
@PyxlDavon 只是一个 request.body 数据,包含电子邮件和密码
-
你能发布 HTML 表单吗,因为正文来自那里
-
@HadidAli,我不确定可选链环,从未听说过。我确定密码不为空,因为如果电子邮件和密码都正确,我可以登录,或者如果只有密码不正确,则显示不正确的电子邮件或密码
标签: javascript node.js express