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

如何在Strapi中添加可访问路由信息的全局中间件

在Strapi中让全局中间件访问路由信息的解决办法

你说的没错,问题根源就是Strapi中间件的执行顺序——默认的全局中间件会在路由匹配阶段之前运行,这时候请求还没和具体路由绑定,自然拿不到路由相关信息。要解决这个问题,只需要调整自定义中间件的执行时机,让它在路由匹配完成后再运行就行,具体步骤如下:

  • 第一步:创建自定义全局中间件
    在src/middlewares/目录下新建一个文件,比如route-info.js,内容如下:

    module.exports = (config, { strapi }) => {
      return async (ctx, next) => {
        // 此时ctx.route已包含完整路由信息,比如路径、请求方法、关联控制器等
        console.log('当前路由路径:', ctx.route.path);
        console.log('允许的请求方法:', ctx.route.methods);
        await next();
      };
    };
    
  • 第二步:调整中间件执行顺序
    打开config/middlewares.js,把你的自定义中间件放在strapi::router之后(这个系统中间件负责完成路由匹配)。配置示例:

    module.exports = [
      'strapi::errors',
      'strapi::security',
      'strapi::cors',
      'strapi::poweredBy',
      'strapi::logger',
      'strapi::query',
      'strapi::body',
      'strapi::session',
      'strapi::favicon',
      'strapi::public',
      'strapi::router', // 路由匹配核心中间件
      'global::route-info', // 你的自定义中间件,必须放在router之后
    ];
    

这样配置后,自定义全局中间件就会在路由匹配完成后执行,此时ctx.route里已经包含了当前请求对应的完整路由信息,你可以根据需求读取或处理这些数据。

注:不同Strapi版本(如v3和v4)的中间件配置细节可能略有差异,但核心逻辑一致——让自定义中间件在路由匹配中间件之后运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:42:07