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
相关产品推荐
相关产品推荐

