Express JS条件判断逻辑失效:传入不同邮箱始终返回相同消息
问题解决:邮箱验证逻辑错误导致返回固定消息
你的代码问题出在数据库查询结果的判断逻辑上,直接拿数组元素(对象)和字符串邮箱比较,永远不会相等,所以每次都返回相同消息。
错误原因
数据库执行select email from Users where email = ?后,返回的queryResult是包含用户对象的数组,结构类似[{ email: 'xxx@example.com' }]:
queryResult[0]是一个对象,不是字符串- 用
===和字符串类型的req.body.email比较,类型不匹配,永远返回false - 若查询不到数据,
queryResult是空数组,queryResult[0]为undefined,同样和邮箱字符串不相等
修正后的代码
简洁版(推荐)
因为查询条件就是匹配邮箱,只要查询到结果就说明邮箱存在,无需再次比较属性:
let message = ""; const findQuery = "select email from Users where email = ?"; const queryResult = await db.query(findQuery, [req.body.email]); if (queryResult.length > 0) { message = "Welcome Back"; } else { message = "No Access"; } res.send(message);
完整验证版(如需额外校验属性)
如果需要确保返回的邮箱和输入完全一致(避免数据库查询逻辑异常):
let message = ""; const findQuery = "select email from Users where email = ?"; const queryResult = await db.query(findQuery, [req.body.email]); if (queryResult.length > 0) { if (queryResult[0].email === req.body.email) { message = "Welcome Back"; } else { message = "No Access"; } } else { message = "No Access"; } res.send(message);
内容的提问来源于stack exchange,提问作者George Ramzi
相关产品推荐
相关产品推荐

