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

Express登录路由异常:PromisePending与async/await无输出问题排查

Express登录路由异常排查与修复

问题根源

  1. 端口冲突:你的MySQL连接池配置中port:3000,但Express服务也在监听3000端口,导致数据库连接无法正常建立,await db.getUserByEmail(email)会一直处于等待状态,因此没有任何控制台输出。
  2. 语法错误:登录路由的try代码块存在多余的闭合括号,导致代码逻辑异常。
  3. 未返回响应:路由处理函数中没有向客户端返回任何响应,会导致请求一直挂起。

修正步骤

1. 修正MySQL连接池端口

MySQL默认端口为3306,将连接池配置中的port改为3306(如果自定义了MySQL端口,请填写实际端口):

const pool = mysql.createPool({
  socketPath:'',
  host: 'localhost',
  user: 'fatima',
  password: 'acess',
  database: 'acess',
  multipleStatements: true,
  canRetry: true,
  connectionLimit : 1000,
  connectTimeout  : 60 * 60 * 1000,
  acquireTimeout  : 60 * 60 * 1000,
  timeout         : 60 * 60 * 1000,
  port: 3306 // 修正为MySQL实际端口
});

2. 修复路由语法错误

移除try块中多余的闭合括号,并添加响应返回:

router.post('/login', async (req, res) => {
  try { 
    const email = "sami@mail.com";
    // const password = req.body.Pass;
    const user = await db.getUserByEmail(email);
    console.log("hi", user);
    // 向客户端返回响应
    res.status(200).json({ user });
  } catch(e) {
    console.log(e);
    // 返回错误响应
    res.status(500).json({ error: e.message });
  }
});

现象解释

  • 未使用async/await时:直接调用db.getUserByEmail返回未决状态的Promise,控制台输出Promise { <pending> }是正常的,因为没有等待Promise完成。
  • 添加async/await后:由于数据库连接因端口冲突无法建立,Promise始终无法resolve或reject(你的超时设置为1小时),导致await一直阻塞,程序没有后续输出。

内容的提问来源于stack exchange,提问作者Fatima sami

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:05:38