Express调用/users/demoLogin后重定向到/users/1出现404错误
Express 404错误排查:/users/demoLogin重定向后GET /users/1无法匹配
问题场景
在Postman测试Express服务器时,调用POST /users/demoLogin登录演示账号后出现404 Not Found错误。控制台日志如下:
POST /users/demoLogin 302 93.222 ms - 30 Executing (default): SELECT "id", "firstName", "lastName", "email", "hashedPassword", "createdAt", "updatedAt" FROM "Users" AS "User" WHERE "User"."id" = 1; NotFoundError: Not Found at /home/jas0123/noted/noted-api/app.js:48:8 ... GET /users/1 404 7.878 ms - 33
打印请求对象确认,错误发生时请求指向url: '/users/1', method: 'GET',但该路由中预设的console.log("Hit this route!")并未输出。
相关代码片段
app.js
const createError = require('http-errors'); const express = require('express'); // 完整代码见用户提供内容 module.exports = app;
用户路由(routes/users.js)
const express = require('express'); // 完整代码见用户提供内容 module.exports = router;
auth中间件(auth.js)
const db = require('./db/models'); // 完整代码见用户提供内容 module.exports = { loginUser, restoreUser, logoutUser }
问题分析与排查建议
重定向本身是正常的(302状态码已返回),问题核心是GET /users/1这个路由并未被Express正确注册或匹配,导致请求直接走到了404中间件。
可能的原因及对应排查步骤:
目标路由未定义
检查routes/users.js中是否存在处理GET请求的/:id路由,比如:router.get('/:id', (req, res) => { console.log("Hit this route!"); // 其他逻辑 });如果没有这段代码,自然无法匹配
/users/1请求。路由挂载顺序错误
查看app.js中路由挂载与404中间件的顺序:必须先挂载所有业务路由,再注册404兜底中间件。正确顺序示例:// 先挂载用户路由 app.use('/users', usersRouter); // 挂载其他业务路由... // 最后注册404中间件 app.use((req, res, next) => { next(createError(404)); });如果404中间件写在路由挂载之前,所有请求都会先触发404,不会走到用户路由。
重定向路径是否符合预期
确认/users/demoLogin的处理函数中,重定向路径是否正确。比如是否是res.redirect(/users/${user.id}),如果路径写错(比如多写或少写层级),也会导致目标路由不存在。
内容的提问来源于stack exchange,提问作者J.spenc
相关产品推荐
相关产品推荐

