Strapi V4中如何注册中间件修改/user或/user/:id的返回响应?
为Strapi内置用户端点添加中间件
因为/api/users和/api/users/:id是Strapi内置users-permissions插件提供的端点,而非自定义内容类型,所以无法直接通过src/api/user目录配置,需通过扩展插件的方式注册中间件,具体步骤如下:
1. 创建插件扩展目录结构
在项目根目录下创建以下目录(不存在则新建):
src/extensions/users-permissions/ ├── routes/ │ └── user.js └── middlewares/ ├── custom-user-find.js └── custom-user-find-one.js
2. 扩展用户路由并注入中间件
编辑src/extensions/users-permissions/routes/user.js,重写用户端点的路由配置,添加自定义中间件:
module.exports = { routes: [ // 对应 /api/users 端点 { method: 'GET', path: '/users', handler: 'user.find', config: { middlewares: ['extensions::users-permissions.custom-user-find'] } }, // 对应 /api/users/:id 端点 { method: 'GET', path: '/users/:id', handler: 'user.findOne', config: { middlewares: ['extensions::users-permissions.custom-user-find-one'] } } ] };
3. 编写自定义中间件
针对/api/users的中间件(custom-user-find.js)
module.exports = (config, { strapi }) => { return async (ctx, next) => { // 可选:请求处理前的逻辑 await next(); // 执行后续端点逻辑 // 修改响应内容的示例 if (ctx.body?.data) { ctx.body.data.forEach(user => { user.custom_tag = '来自中间件的自定义内容'; }); } }; };
针对/api/users/:id的中间件(custom-user-find-one.js)
module.exports = (config, { strapi }) => { return async (ctx, next) => { await next(); // 修改单个用户响应数据的示例 if (ctx.body?.data) { ctx.body.data.custom_tag = '单个用户的自定义标记'; } }; };
4. 重启Strapi服务
完成配置后重启Strapi,新中间件将在访问/api/users或/api/users/:id时生效。
注意事项
- 禁止直接修改
node_modules下的users-permissions插件文件,使用src/extensions目录扩展是官方推荐方式,可避免升级Strapi时丢失自定义配置。 - 中间件标识
extensions::users-permissions.xxx对应src/extensions/users-permissions/middlewares/xxx.js文件,格式固定。
内容的提问来源于stack exchange,提问作者gordie
相关产品推荐
相关产品推荐

