Next.js API路由连接PostgreSQL失败无法获取数据求助
问题原因与修复方案
你这个接口返回500错误是几个常见问题叠加导致的,按下面顺序排查修改即可:
- 模块导入路径错误
你的数据库连接文件server.js存放在项目根目录,但在/src/pages/api/users.ts中写import pool from "server"时,Node会默认去node_modules目录下寻找名为server的第三方依赖包,根本不会加载你本地写的连接文件。改成对应相对路径即可:
// /src/pages/api/users.ts // 从当前users.ts所在目录向上回溯3层到达项目根目录,再引入server模块 import pool from "../../../server";
如果改完导入报JS/TS模块兼容错误,打开根目录tsconfig.json,在compilerOptions中把allowJs设为true,允许TS文件导入CommonJS规范的JS模块。
- SQL语句误用保留关键字
PostgreSQL中user是内置保留关键字,直接执行SELECT * FROM user不会查询你自定义的用户表,而是调用内置user函数返回当前数据库连接的账号名。如果你的表确实命名为user,必须给表名加双引号转义;更推荐直接把表名改为非保留字的users,避免后续所有SQL都要额外转义:
// 表名为user的转义写法 const data = await pool.query('SELECT * FROM "user"'); // 推荐改表名为users的写法 const data = await pool.query('SELECT * FROM users');
- 错误逻辑吞掉了真实报错信息
你现在catch块直接返回固定错误文案,开发阶段根本看不到实际报错原因,先把错误打印逻辑加上,后续出问题能直接定位:
} catch (err) { // 开发环境在终端打印真实错误 console.error('接口执行出错:', err); res.status(500).json({ error: 'failed to load data' }) }
另外注意你贴的curl详细日志里,实际发起请求的路径是/api/decks而不是/api/users,如果改完上述配置还是报错,先确认请求的URL和实际API路由路径完全匹配。
改完所有配置后重启next dev服务再测试接口即可。
内容的提问来源于stack exchange,提问作者F.Yuya
相关产品推荐
相关产品推荐

