使用限流器不能捕捉异常

超龄码农

问题描述

使用官方的限流器,无法自己捕捉异常。直接请求api是对的,用axios访问时候触发异常就报跨域错误了
postman请求是正常的 axios请求触发限流就报跨域 我怀疑是这个官方限流器response被清空了 有大佬知道吗
这里详细描述问题

程序代码

   #[RateLimiter(limit: 1, ttl: 60, message: 'Request limit reached. Please try again later.')]
    public function test(Request $request): Response
    {

![截图](/upload/img/20250928/2868d8e6246098.png)
这里粘代码

截图
截图
异常接管
尝试打印
default.INFO: 捕获到异常:Webman\RateLimiter\RateLimitException [] []

报错信息

这里粘贴报错

查看日志
截图

216 2 0
2个回答

qq7467466

跨域问题请查看文档或使用插件

同时记得在你的Route.php 最下方增加以下代码:


Route::options('[{path:.+}]', function (){
    return response('');
});```
  • 超龄码农 14天前

    不是跨域问题 请求第一次是正常的 请求第二次触发限流就报跨域问题 其实是捕捉异常那没返回我定义的格式

six
            ┌─────────────────────────────────────────────────────────────┐
            │                         限流中间件                           │
            │      ┌────────────────────────────────────────────────┐     │
            │      │                   跨域中间件                     │     │
            │      │          ┌──────────────────────────────┐      │     │
            │      │          │        其它中间件              │      │     │
            │      │          │    ┌──────────────────┐      │      │     │
            │      │          │    │                  │      │      │     │
   ── Reqeust ──┐  │          │    │    Controller    │      │      │     │
            │ 异常  │          │    │                  │      │      │     │
   <────────────┘  │          │    └──────────────────┘      │      │     │
            │      │          │                              │      │     │
            │      │          └──────────────────────────────┘      │     │
            │      │                                                │     │
            │      └────────────────────────────────────────────────┘     │
            │                                                             │
            └─────────────────────────────────────────────────────────────┘

这就是手册说的洋葱模型啊,请求到限流中间件就返回了,没执行到跨域中间件所以就报跨域错误。
想办法把跨域中间件放到限流中间件前面就行了。

  • 超龄码农 14天前

    我也是想到访到前面去 。但是都是插件下载。都是全局 这个位置没办法处理

  • six 13天前

    config/plugin/webman/cors/middleware.php 里改成

    return [
        '@' => [
            \Webman\Cors\CORS::class
        ]
    ];

    config/plugin/webman/rate-limiter/middleware.php 里改成

    return [
        '' => [
            Limiter::class
        ],
    ];
  • 超龄码农 13天前

    如果更新框架会被覆盖了吗

  • six 13天前

    不会,更新只更新程序,不覆盖配置

🔝