You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:35:39