提交登录凭证时遇404错误:POST /api/user/login路径未找到
404 Not Found错误排查与修复方案
核心问题1:路由文件错误
你提供的用户路由文件内容和server.js完全重复,属于复制错误。正确的用户路由文件应使用express.Router()定义子路由,而非重新创建Express实例并启动服务。
修正后的routes/userRoutes.js示例:
const express = require("express"); const router = express.Router(); const { registerUser, authUser, allUsers } = require("../controllers/userController"); // 注册接口 router.post("/", registerUser); // 关键:添加登录接口路由 router.post("/login", authUser); // 获取用户列表接口 router.get("/", allUsers); module.exports = router;
核心问题2:端口不匹配
你的后端server.js监听的是8000端口(port = process.env.PORT || 8000),但前端login.js请求的是http://localhost:3000/api/user/login,端口不一致直接导致404。
修正前端请求地址:
const { data } = await axios.post( "http://localhost:8000/api/user/login", // 将3000改为8000 { email, password }, config );
其他潜在问题检查
- 确认后端服务启动后控制台输出
server is listening at 8000,确保服务运行在正确端口 - 验证
server.js中require("./routes/userRoutes")的文件路径与实际文件位置一致 - 优化控制器错误处理:当前
authUser函数抛出错误时未正确返回响应,建议调整为:const authUser = async (req, res) => { const { email, password } = req.body; try { const user = await User.findOne({ email }); if (user && (await user.matchPassword(password))) { res.json({ _id: user._id, name: user.name, email: user.email, isAdmin: user.isAdmin, pic: user.pic, token: generateToken(user._id), }); } else { res.status(401).json({ message: "Invalid Email or Password" }); } } catch (error) { res.status(500).json({ message: "Server Error" }); } };
内容的提问来源于stack exchange,提问作者Tushar Kumar
相关产品推荐
相关产品推荐

