MERN栈项目POST /api/auth/signup请求失败求助排查
问题诊断与解决方案
核心问题1:路由挂载顺序错误
Express中app.listen()启动服务器后,后续代码不会再执行路由挂载逻辑,这直接导致/api/auth/signup路由未被注册,触发Cannot POST错误。
修复index.js,将路由挂载代码移至app.listen()之前:
import express from 'express'; import mongoose from 'mongoose'; import dotenv from 'dotenv'; import userRouter from './routes/user.routes.js'; import authRouter from './routes/auth.route.js'; dotenv.config(); mongoose .connect(process.env.MONGO) .then(() => { console.log('Connected to MongoDB!'); }) .catch((err) => { console.log(err); }); const app = express(); app.use(express.json()); // 先挂载所有路由 app.use('/api/user', userRouter); app.use('/api/auth', authRouter); // 再启动服务器 app.listen(3000, () => { console.log('Server is running on port 3000'); });
核心问题2:启动脚本路径拼写错误
package.json的start脚本中路径写成了pai/index.js,正确路径应为api/index.js,修正后:
{ "scripts": { "dev": "nodemon api/index.js", "start": "node api/index.js" } }
额外优化:控制器未返回响应
当前auth.controller.js的signup函数仅打印请求体但无响应返回,会导致请求长期挂起,建议补充基础响应逻辑:
export const signup = (req, res) => { console.log(req.body); // 返回基础响应避免请求挂起 res.status(200).json({ message: "Signup request received" }); };
验证步骤
- 重启服务器:执行
npm run dev - 在Insomnia中发送POST请求到
http://localhost:3000/api/auth/signup,请求体传入JSON格式用户数据(示例:{"username":"test","email":"test@example.com","password":"123456"}) - 检查控制台是否打印请求体,同时Insomnia是否收到响应
内容的提问来源于stack exchange,提问作者Supichaya
相关产品推荐
相关产品推荐

