mysql - TypeError:无法读取登录路径中未定义的属性“密码”
问题描述
当我使用 mysql DB 中不存在的电子邮件请求 api 时,它会引发错误,但在相反的情况下它会运行。
错误:
S:\#development\Pepperkart\pepperkart-backend\node_modules\mysql\lib\protocol\Parser.js:437
throw err; // Rethrow non-MySQL errors
^
TypeError: Cannot read property 'password' of undefined
at Query.db.query (S:\#development\Pepperkart\pepperkart-backend\routes\users.js:19:43)
at Query.<anonymous> (S:\#development\Pepperkart\pepperkart-backend\node_modules\mysql\lib\Connection.js:525:10)
at Query._callback (S:\#development\Pepperkart\pepperkart-backend\node_modules\mysql\lib\Connection.js:491:16)
at Query.Sequence.end (S:\#development\Pepperkart\pepperkart-backend\node_modules\mysql\lib\protocol\sequences\Sequence.js:83:24)
at Query._handleFinalResultPacket (S:\#development\Pepperkart\pepperkart-backend\node_modules\mysql\lib\protocol\sequences\Query.js:139:8)
at Query.EofPacket (S:\#development\Pepperkart\pepperkart-backend\node_modules\mysql\lib\protocol\sequences\Query.js:123:8)
at Protocol._parsePacket (S:\#development\Pepperkart\pepperkart-backend\node_modules\mysql\lib\protocol\Protocol.js:291:23)
at Parser._parsePacket (S:\#development\Pepperkart\pepperkart-backend\node_modules\mysql\lib\protocol\Parser.js:433:10)
at Parser.write (S:\#development\Pepperkart\pepperkart-backend\node_modules\mysql\lib\protocol\Parser.js:43:10)
at Protocol.write (S:\#development\Pepperkart\pepperkart-backend\node_modules\mysql\lib\protocol\Protocol.js:38:16)
[nodemon] app crashed - waiting for file changes before starting...
我的 api 看起来像这样:
router.post('/login', (req, res) => {
var email = req.body.email
var password = req.body.password
var GRAB_USER = `SELECT * FROM user_details WHERE email = ?`
db.query(GRAB_USER, email, (err, result) => {
if (err) {
res.send('email not found')
} else {
var user = result[0]
bcrypt.compare(password, user.password, (err, match) => {
if (err) {
res.send('password not match')
} else {
res.send(user)
}
});
}
})
})
解决方案
您的查询很好并且没有给出错误,因此您还应该检查result.length> 0
然后res.send('email not found')
router.post('/login', (req, res) => {
var email = req.body.email
var password = req.body.password
var GRAB_USER = `SELECT * FROM user_details WHERE email = ?`
db.query(GRAB_USER, email, (err, result) => {
if (err) {
res.send('email not found')
}
else if (result.length==0) {
res.send('email not found') //this is what you are missing
}
else {
var user = result[0]
bcrypt.compare(password, user.password, (err, match) => {
if (err) {
res.send('password not match')
} else {
res.send(user)
}
});
}
})
})
推荐阅读
- uml - UML 状态机:本地转换
- android - 在 Recyclerview 适配器中获取项目是否完全可见
- firefox - 在 OEL (Oracle Enterprise Linux) 上安装 Firefox
- amazon-mws - MWS 中的 GetLowestPricedOffersForASIN 和 GetLowestOfferListingsForASIN 有什么区别
- mvvm - 检查 WPF MVVM 绑定中更改的属性
- google-apps-script - 将带有图标的项目添加到 Google Apps 脚本中的菜单
- java - 我可以使用惰性初始化来使用 RmiServiceExporter 吗?
- python - python3 - 如何使用 python 请求克服最大 url 限制
- c# - C# VSTO AddIn 查找字段功能区
- c# - 无法设置将模拟传递到对象列表中的方法c#