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

为何数据库query无返回值?Node.js登录接口排查求助

问题排查与修复方案

核心问题分析

你的代码存在多个关键问题,导致接口无返回、逻辑无法正常执行:

  1. 混用Promise与回调API:使用了mysql2/promise的Promise式连接池,却用回调写法调用getConnection和query,导致逻辑流程断裂。
  2. 未向前端返回响应:接口函数全程没有调用res.json()/res.send()等响应方法,前端自然收不到任何数据。
  3. 连接释放错误:错误调用db.release(),正确的释放逻辑应该是针对getConnection拿到的connection对象,且mysql2/promise的连接池可自动管理连接,无需手动操作。
  4. 请求体解构错误:若前端传递标准JSON格式(如{"email":"xxx","password":"xxx"}),req.body[0]/req.body[1]无法获取对应值。
  5. 错误处理不规范:回调中throw err会引发未捕获异步异常,可能导致服务器崩溃。

修复后的代码

1. 接口文件 api/login/index.js

// api/login/index.js
import { db } from '../server/db.js';

export default async function(req, res) {
  try {
    // 正确解构请求体的email和password(适配前端JSON格式)
    const { email, password } = req.body;

    // 使用mysql2/promise的async/await语法执行查询
    const [result] = await db.query(
      'SELECT email FROM users WHERE email = ? AND password = ?',
      [email, password]
    );

    // 根据查询结果返回对应响应
    if (result.length > 0) {
      res.status(200).json({ 
        success: true, 
        message: '验证通过',
        user: { email: result[0].email } // 避免返回敏感字段password
      });
    } else {
      res.status(401).json({ 
        success: false, 
        message: '邮箱或密码错误' 
      });
    }
  } catch (error) {
    // 捕获异常并返回错误响应,同时记录日志
    console.error('查询错误:', error);
    res.status(500).json({ 
      success: false, 
      message: '服务器内部错误' 
    });
  }
}

2. 数据库配置文件 db.js

// db.js
import dotenv from 'dotenv';
import sql from 'mysql2/promise';

// 修正.env路径,根目录下应为./.env而非/.env
dotenv.config({ path: './.env' });

export const db = sql.createPool({
  host: process.env.NEXT_PUBLIC_DB_HOST,
  user: process.env.NEXT_PUBLIC_DB_USERNAME,
  database: process.env.NEXT_PUBLIC_DB_NAME,
  password: process.env.NEXT_PUBLIC_DB_PASSWORD,
  waitForConnections: true,
  queueLimit: 0
});

额外注意事项

  • 避免向前端返回用户密码等敏感字段,即使测试环境也需遵循安全规范。
  • 确认.env文件路径正确,否则会导致数据库连接失败。
  • 生产环境中建议对密码进行哈希存储(如使用bcrypt),不要明文存储用户密码。

内容的提问来源于stack exchange,提问作者Pierre Loti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:54:14