MERN项目PostgreSQL连接及路由问题求助(新手)
问题排查与解决方案
1. 核心问题:你运行的是路由模块,不是完整的Express服务器
你的server.js本质是路由文件,只定义了接口路由规则,没有启动Express服务器的核心逻辑。直接运行它只会导出路由对象,不会有任何控制台输出或服务启动。
解决办法:创建主服务器入口文件
新建index.js(或app.js)作为服务器主文件,内容示例:
const express = require('express'); const app = express(); // 引入你的路由文件,注意路径要和实际文件位置匹配 const userRoutes = require('./server.js'); // 必须添加的中间件:解析JSON格式的请求体 app.use(express.json()); // 挂载路由到指定前缀下 app.use('/api/users', userRoutes); // 启动服务器监听端口 const PORT = process.env.PORT || 5000; app.listen(PORT, () => { console.log(`Server running on http://localhost:${PORT}`); });
之后运行node index.js,控制台会输出服务启动信息,再去测试接口。
2. 数据库连接文件(../db.js)验证
确保db.js的PostgreSQL配置正确,并且有连接测试逻辑:
const { Pool } = require('pg'); const pool = new Pool({ user: '你的数据库用户名', host: 'localhost', // 本地数据库填这个,远程的话填对应地址 database: '你的数据库名', password: '你的数据库密码', port: 5432, // PostgreSQL默认端口,没改的话不用动 }); // 测试数据库连接 pool.connect((err) => { if (err) { console.error('数据库连接失败:', err.message); } else { console.log('已成功连接PostgreSQL数据库'); } }); module.exports = pool;
如果连接配置错误,即使服务启动,接口也会返回500错误。
3. 接口测试路径注意
假设主文件里把路由挂载到了/api/users,那你的测试接口完整路径是:
GET http://localhost:5000/api/users/test-connection
别直接访问/test-connection,会提示404。
4. 代码里的其他潜在问题
- 更新用户接口的字段不匹配:你的更新接口用
email作为查询条件,但注册接口只插入了username和password,如果User表没有email字段,这个接口会执行失败。 - 更新密码未哈希:更新用户时直接存明文密码,和注册时的哈希逻辑不一致,后续登录会验证失败,建议更新时也要用
bcrypt.hash处理密码。 - SQL表名大小写问题:PostgreSQL对加引号的表名大小写敏感,如果你的实际表名是小写的
user,SQL语句里的"User"会找不到表,确认表名是否一致。
内容的提问来源于stack exchange,提问作者Aliya
相关产品推荐
相关产品推荐

