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

Strapi 4+NextJS技术问题:如何获取用户专属音乐活动数据?

Strapi 4 获取用户专属音乐活动数据失败的解决方案

问题场景

使用Strapi 4搭配NextJS开发应用,需实现用户添加、获取专属音乐活动的功能。配置自定义路由与控制器后,调用/events/me接口返回200状态码但内容为空对象,控制器中console.log('data', data)无输出,且原Strapi 3中可行的查询代码在Strapi 4中失效:

const data = await strapi.services.events.find({ user: user.id})

核心问题原因

Strapi 4在服务调用、查询语法、路由配置上与Strapi 3有较大差异,主要涉及三点:

  • 服务命名规范变更
  • 查询过滤语法重构
  • 路由与控制器的引用路径调整

修正方案

1. 修正自定义路由文件(custom-event.js)

Strapi 4中路由的handler需遵循api::[内容类型].[控制器名].[方法]的格式,同时auth配置需直接放在config对象下:

module.exports = {
  routes: [
    {
      method: 'GET',
      path: '/events/me',
      handler: 'api::event.custom-controller.me',
      config: {
        auth: true,
        policies: [],
        middlewares: [],
      }
    },
  ],
}

2. 修正自定义控制器文件(custom-controller.js)

针对Strapi 4的服务调用与查询语法进行调整:

module.exports = createCoreController('api::event.event', ({ strapi }) => ({
  async me(ctx) {
    try {
      const user = ctx.state.user;

      if (!user) {
        return ctx.badRequest(null, [
          { messages: [{ id: 'No authorization header was found' }] }
        ]);
      }

      console.log('user', user);

      // 适配Strapi 4的服务调用与查询过滤语法
      const { results } = await strapi.service('api::event.event').find({
        filters: {
          user: { id: user.id }
        },
        populate: '*' // 如需返回关联的用户数据可添加,按需配置
      });

      console.log('data', results);

      if (!results.length) {
        return ctx.notFound('当前用户暂无音乐活动');
      }

      // 使用Strapi 4内置的sanitizeOutput方法处理实体数据
      return results.map(entity => 
        strapi.service('api::event.event').sanitizeOutput(entity, ctx)
      );
    } catch (err) {
      ctx.status = 500;
      ctx.body = { error: err.message };
    }
  }
}));

关键调整说明

  • 服务调用格式:Strapi 4需使用strapi.service('api::[内容类型].[内容类型]')替代Strapi 3的strapi.services.[内容类型],例如api::event.event对应你的events内容类型。
  • 查询过滤语法:使用filters对象包裹查询条件,关联字段需通过嵌套对象{ id: user.id }匹配,而非直接传入ID。
  • 数据 sanitize:使用服务的sanitizeOutput方法替代原sanitizeEntity,确保正确应用权限与字段过滤规则。
  • 错误处理优化:明确设置错误状态码与友好提示,便于调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:40:36