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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:43:25