Laravel5.8 API 接口请求,出现问题,烦请指教

**> exception: "Symfony\Component\Debug\Exception\FatalThrowableError"

message: "Argument 1 passed to Illuminate\Routing\Middleware\ThrottleRequests::addHeaders() must be an instance**

这个问题 百度上也没有个方向是指,返回的数据必须是 response->json 不能是 json_encode ,
实际这个问题出现时 是api接口请求时出现的,也看到这个中间件时限制api请求频率的,但是报的这个错误,确实不清楚怎么出现的 ,烦请各位不吝赐教!!!

  1. 中间件中不能用json_encode
    使用 return response()->json(array('code' => ErrorCode::NOT_LOGIN, 'msg' => ErrorMsg::$errorMsg[ErrorCode::NOT_LOGIN])); 就好了。
    原文:https://blog.csdn.net/qq_32534555/article/...

"这是其中一个答案百度看到的"

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

好的,总之中间件的返回值需要注意这个问题。但是我觉得你遇上这个问题的源头主要还是你在中间件中用了这种不咋么常规的写法,一般我习惯用抛出异常来处理,而且权限不足其实系统也有预设的异常可以使用,包括可以看一下官方的Authenticate中间件里面我也看到用的是抛出异常。

4年前 评论
讨论数量: 12

你是否重写过Exceptions/Handler

4年前 评论

exception: "Symfony\Component\Debug\Exception\FatalThrowableError"
file: "C:\phpStudy\PHPTutorial\WWW\hyhd\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php"
line: 149
message: "Argument 1 passed to Illuminate\Routing\Middleware\ThrottleRequests::addHeaders() must be an instance of Symfony\Component\HttpFoundation\Response,
null given, called in C:\phpStudy\PHPTutorial\WWW\hyhd\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php on line 62" :confused:

4年前 评论

@Kamicloud 下了个组件passport 的 中间件也使用的是 auth:api,和自己创建的一个power
Route::group(['middleware' => ['auth:api', 'power']]

4年前 评论

那好像确实不是我之前说的,能把更完整的异常日志和中间件的代码发出来看看嘛?我现在觉得会不会是这个中间件有没有return的case导致的,因为你的条件看着很多的样子。我在本地有试了一下,如果前一个中间件不 return 任何东西(或者说 return 的不是一个\Symfony\Component\HttpFoundation\Response对象)就可以重现一模一样的错误。

4年前 评论

@ddingchen 我按照你说的 把 返回的json_encode 改了下 改为 response的 方式 目前还没有在遇到这个报错

4年前 评论

好的,总之中间件的返回值需要注意这个问题。但是我觉得你遇上这个问题的源头主要还是你在中间件中用了这种不咋么常规的写法,一般我习惯用抛出异常来处理,而且权限不足其实系统也有预设的异常可以使用,包括可以看一下官方的Authenticate中间件里面我也看到用的是抛出异常。

4年前 评论

@ddingchen 昨天也出现了几次。。。。。还是看看中间件如何去返回吧

4年前 评论

又出现了那个问题 。。。

4年前 评论

这个问题一般是没有传递参数 ,此问题出现在中间件中,问题原因是比对权限时前台传递的参数不对,父id 和子id 相等了,所以出现

4年前 评论

我这里出现的问题是后置中间件

public function handle($request, Closure $next)
{
    $response = $next($request);
        if ($whatEver) {
            return response()->json(
                [
                    'message'    => '出现错误',
                ], 400
            );
     }
 }

没走 if,又没返回东西,在 if 外面加个return $response;就可以了

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!