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

Express+MariaDB项目中查询结果返回undefined问题求助

问题分析与解决

问题原因

你的代码里User.all()方法的finally块使用了return语句,这会覆盖try块中return的rows值。当try块执行完return rows后,程序会进入finally块,而finally里的return conn.end()会让整个async函数返回conn.end()的结果(通常是undefined),导致路由里拿到的data变成undefined。

修正后的代码

修改User.mjs中的finally块,移除return,并给conn.end()加上await(确保连接异步释放完成,同时不干扰返回值):

const User = {
    all: async () => {
        let conn;
        try {
            conn = await pool.getConnection()
            const rows = await conn.query(`SELECT * FROM users`);

            console.log(rows)
            return rows

        } catch (err) {
            throw err;
        } finally {
            if (conn) await conn.end(); // 移除return,添加await保证连接释放
        }
    }
}

export default User;

架构可行性

这种路由与数据库操作分离的架构不仅可行,还是Node.js/Express开发中的最佳实践。它的好处包括:

  • 路由层专注处理HTTP请求和响应逻辑,代码更清晰易读
  • 数据库操作集中在模型层,方便复用和维护
  • 模型层的方法可以单独编写单元测试,无需依赖HTTP上下文
  • 降低代码耦合,修改数据库逻辑时不需要改动路由代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:50:03