You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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中间件。

可能的原因及对应排查步骤:

  1. 目标路由未定义
    检查routes/users.js中是否存在处理GET请求的/:id路由,比如:

    router.get('/:id', (req, res) => {
      console.log("Hit this route!");
      // 其他逻辑
    });
    

    如果没有这段代码,自然无法匹配/users/1请求。

  2. 路由挂载顺序错误
    查看app.js中路由挂载与404中间件的顺序:必须先挂载所有业务路由,再注册404兜底中间件。正确顺序示例:

    // 先挂载用户路由
    app.use('/users', usersRouter);
    // 挂载其他业务路由...
    // 最后注册404中间件
    app.use((req, res, next) => {
      next(createError(404));
    });
    

    如果404中间件写在路由挂载之前,所有请求都会先触发404,不会走到用户路由。

  3. 重定向路径是否符合预期
    确认/users/demoLogin的处理函数中,重定向路径是否正确。比如是否是res.redirect(/users/${user.id}),如果路径写错(比如多写或少写层级),也会导致目标路由不存在。

内容的提问来源于stack exchange,提问作者J.spenc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:46:14