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

JWT Express中间件验证通过后返回404错误,求排查问题

问题分析与解决

你的问题出在处理函数导出时的语法错误,导致token验证通过后请求无法匹配到正确的处理逻辑,最终返回404。

错误原因

你写的exports.test = jwtMiddleware, (req, res) => {...}使用了JavaScript的逗号运算符,这个运算符会返回最后一个表达式的值——也就是后面的箭头函数,jwtMiddleware并没有被纳入请求处理链中。虽然你提到token错误时返回符合预期(可能是全局应用了中间件或代码书写误差),但验证通过后next()调用无法找到后续处理逻辑,最终返回404。

修正方案

以下是几种正确的写法:

方案1:直接在路由中传递中间件和处理函数

去掉单独的exports.test定义,直接在路由配置里分开传递:

// 路由配置
router.post("/composer/test", jwtMiddleware, (req, res) => {
    res.status(200).send({
      message: "Success"
    });   
});

方案2:用数组包装中间件和处理函数后导出

将中间件和业务处理函数放在数组中导出,express会自动按顺序执行:

// 导出处理链
exports.test = [jwtMiddleware, (req, res) => {
    res.status(200).send({
      message: "Success"
    });   
}];

// 路由配置(两种写法都可行)
router.post("/composer/test", middleware.test);
// 或者展开数组:router.post("/composer/test", ...middleware.test);

方案3:手动组合中间件(不推荐)

如果一定要合并成单个函数,可以手动调用中间件并传递自定义的next逻辑:

exports.test = (req, res, next) => {
  jwtMiddleware(req, res, () => {
    res.status(200).send({ message: "Success" });
  });
};

额外检查

如果修正后仍有404,确认路由挂载路径是否正确:比如如果你的router是通过app.use('/api', router)挂载的,实际请求路径应为/api/composer/test,而非直接/composer/test。

内容的提问来源于stack exchange,提问作者Morris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:13:19