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

Strapi v4自定义端点创建问题:strapi-utils缺失及路由疑问

Strapi v4 自定义端点events/me修复方案

1. 修复strapi-utils模块找不到的问题

Strapi v4 将sanitizeEntity方法迁移到了@strapi/utils包,同时服务、模型的调用方式也有变更,修改后的控制器代码如下:

"use strict";
const { sanitizeEntity } = require("@strapi/utils");

module.exports = {
  async me(ctx) {
    const user = ctx.state.user;

    if (!user) {
      return ctx.badRequest(null, {
        message: "No authorization header was found",
      });
    }

    // v4 中服务调用格式变更为 strapi.service('api::content-type.uid')
    const events = await strapi.service('api::event.event').find({
      filters: { user: user.id },
    });

    if (!events.data.length) {
      return ctx.notFound("No events found for this user");
    }

    // 对每个实体进行 sanitize
    const sanitizedEvents = events.data.map(event => 
      sanitizeEntity(event, { model: strapi.db.query('api::event.event').model })
    );

    return sanitizedEvents;
  },
};

关键变更点:

  • 导入路径从strapi-utils改为@strapi/utils
  • 服务调用使用strapi.service('api::event.event'),查询参数需包裹在filters对象中
  • 模型引用使用strapi.db.query('api::event.event').model
  • 错误返回格式适配 v4 的规范
  • 处理find方法返回的分页结构(v4 服务默认返回包含data和meta的对象)

2. 配置自定义路由(替代原routes.json)

在src/api/event/routes/event.js中添加自定义路由配置,确保端点/events/me指向控制器的me方法:

module.exports = {
  routes: [
    // 保留默认生成的路由(如果需要)
    {
      method: "GET",
      path: "/events",
      handler: "event.find",
      config: {
        auth: false,
      },
    },
    // 添加自定义的 /events/me 路由
    {
      method: "GET",
      path: "/events/me",
      handler: "event.me",
      config: {
        auth: {
          strategy: "jwt", // 要求用户登录才能访问
        },
      },
    },
  ],
};

3. 确认模型关联(可选但必要)

确保你的Event内容类型已与用户建立关联,在src/api/event/content-types/event/schema.json的attributes中添加:

{
  "attributes": {
    // 其他字段...
    "user": {
      "type": "relation",
      "relation": "manyToOne",
      "target": "plugin::users-permissions.user",
      "inversedBy": "events"
    }
  }
}

修改完成后,重启 Strapi 服务,即可通过GET /api/events/me(v4 默认前缀是/api)访问当前登录用户的事件列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:18:22