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

Strapi 4自定义控制器与路由创建问题求助

排查Strapi 4自定义路由/控制器的ForbiddenError问题

常见错误点及修复步骤

  • 权限配置缺失
    进入Strapi后台,打开Settings > Roles & Permissions,找到你测试用的角色(比如Public或Authenticated),在对应todo集合的权限列表里,找到自定义的hello动作并勾选启用,保存后重新测试。自定义控制器方法不会自动生成权限,必须手动配置。

  • 路由配置错误
    检查src/api/todo/routes/todos.js的路由定义,确保方法、路径和控制器绑定正确:

    module.exports = {
      routes: [
        {
          method: 'GET',
          path: '/todos/hello',
          handler: 'todo.hello', // 格式为[控制器文件名].[方法名],控制器为todo.js则写todo.hello
          config: {
            policies: [], // 无需额外权限策略可留空或删除该行
          },
        },
      ],
    };
    

    注意路径不要与默认路由冲突。

  • 控制器方法定义问题
    检查src/api/todo/controllers/todo.js的方法格式,确保符合Strapi 4规范:

    'use strict';
    
    module.exports = {
      async hello(ctx) {
        ctx.body = {
          message: 'Hello from custom controller!'
        };
        // 若需处理业务逻辑,可调用服务层方法
        // const data = await strapi.service('api::todo.todo').customService();
        // ctx.body = data;
      },
    };
    

    异步操作需添加async,确保方法正确挂载到控制器对象上。

  • 策略(Policies)限制
    若路由中配置了policies,检查对应策略是否允许当前请求通过。比如默认isAuthenticated策略要求用户登录,测试Public访问时需移除该策略。

正确创建自定义控制器的步骤

  1. 编写控制器方法
    在src/api/[content-type]/controllers/[content-type].js中添加自定义方法,参考上述示例格式。
  2. 配置自定义路由
    在src/api/[content-type]/routes/[content-type].js中添加路由规则,绑定对应的控制器方法,确保路径和HTTP方法匹配。
  3. 开启权限
    后台手动为目标角色开启自定义动作的权限,这是引发ForbiddenError的最常见原因。
  4. 重启服务
    修改路由或控制器后,重启Strapi服务确保配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:58:14