如何在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
相关产品推荐
相关产品推荐

