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

Node.js中基于MySQL校验手机号/邮箱对应用户存在性时,未找到用户仍返回成功的问题解决

Node.js中基于MySQL校验手机号/邮箱对应用户存在性时,未找到用户仍返回成功的问题解决

老哥,我瞅了你贴的代码,问题其实挺明显的——你现在的逻辑只是执行了查询并返回结果,但完全没判断查询结果里有没有匹配的用户!当数据库里找不到对应手机号或邮箱的记录时,result会是一个空数组,这时候你的接口依然把它当成成功结果返回,自然前端看到的还是"success"状态。

咱们一步步改,先把逻辑捋顺:

第一步:简化模型层的查询代码

你之前手动封装Promise完全没必要,mysql2的pool.query本身就支持async/await,直接用就行,代码更清爽:

// model文件修改后
export async function existing_customer_check(data) {
    const { email, mobile } = data;
    // 注意把SQL里的||改成OR,MySQL里OR是标准的逻辑或写法,更稳妥
    const register_customer_check_query = `SELECT email , mobile FROM users WHERE email = ? OR mobile = ?`;
    
    try {
        // 直接await调用,解构拿到查询结果
        const [result] = await pool.query(register_customer_check_query, [email, mobile]);
        return result;
    } catch (error) {
        throw new Error(`查询用户信息失败:${error.message}`);
    }
}

第二步:在控制器层添加存在性判断逻辑

你之前贴的控制器代码和模型完全重复了,应该是控制器调用模型的查询函数,然后根据结果返回不同的响应:

// controller文件修改后
import { existing_customer_check } from './你的模型文件路径.js';

export async function handleExistingCustomerCheck(req, res) {
    // 从请求体里获取前端传的手机号/邮箱
    const { email, mobile } = req.body;

    try {
        const customerList = await existing_customer_check({ email, mobile });
        
        // 核心判断:如果查询结果是空数组,说明用户不存在
        if (customerList.length === 0) {
            return res.status(404).json({
                status: "fail",
                message: "未找到该用户,请检查手机号或邮箱是否正确"
            });
        }

        // 查到用户的情况,返回成功响应
        res.status(200).json({
            status: "success",
            message: "用户存在",
            data: customerList
        });
    } catch (error) {
        // 处理数据库查询出错的情况
        res.status(500).json({
            status: "error",
            message: error.message
        });
    }
}

关键说明

  • 核心判断逻辑:MySQL查询无匹配结果时会返回空数组,所以通过customerList.length === 0就能准确判断用户是否存在。
  • 状态码规范:用404表示资源(用户)不存在,200表示成功,500表示服务器内部错误,前端可以根据状态码快速处理不同场景。
  • SQL语法优化:把||改成OR,避免在MySQL的严格模式下出现语法问题,符合SQL标准写法。

备注:内容来源于stack exchange,提问作者MAVEN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 09:34:32