Laravel - 防止错误显示在控制台中

Posted

技术标签:

【中文标题】Laravel - 防止错误显示在控制台中【英文标题】:Laravel - Prevent errors from being shown in console 【发布时间】:2016-03-12 09:21:41 【问题描述】:

我正在执行 ajax 请求,如果验证失败,则会向用户显示错误消息。

但是,用户也可以在控制台中看到错误消息。例如,如果用户没有完成其中一个字段,则在控制台中,它会显示以下内容:

加载资源失败:服务器响应状态为 422 (Unprocessable Entity)

我不希望他们看到错误。如何防止他们在控制台中看到此类错误以及其他错误,例如 501 错误等。我只是想显示一个警告说“发生错误”。我不想在控制台中显示任何内容。

我当前的 AJAX 代码:

(function ($) 
        $('#settingsForm').submit(function (e) 
            $.ajax(
                type: "POST",
                dataType: 'JSON',
                url: '/settings',
                data: $('#settingsForm').serialize(),
                beforeSend: function () 

                ,
                success: function (data) 
                    message(data);
                ,
                error: function (data) 

                    if (data.status === 422 ) 

                        var errors = $.parseJSON(data.responseText);
                        errorshtml = '<div class="alert alert-danger"><ul>';
                        $.each(errors, function (index, value) 
                            errorsHtml += '<li>' + value + '</li>';
                        );
                        errorsHtml += '</ul></div>'
                        $('#status_settings').html(errorsHtml);
                    

                
            )
            ;

            e.preventDefault();
        )
        ;
    )
    (window.jQuery);

【问题讨论】:

您是否有任何特殊原因要隐藏这些错误消息?我认为,如果可能的话,它需要一些特殊的权限来请求,或者通过浏览器扩展。 可能在 dataType: 'JSON' 上。你得到现场的输入了吗?测试Input::get('YOUR_INPUT_FIELD') 我没有显示,而是观察错误并显示错误警报。我得到了现场输入,是的 对不起,我错过了理解你的问题,所以你想在浏览器控制台中抑制错误代码。是的,您可以通过 javascript 访问 chrome 控制台对象,但是您是否可以抑制错误,这需要一些在这方面有经验的人。 你不能。这些是 HTTP 错误。任何人都可以通过控制台查看它们。 【参考方案1】:

看起来您正在使用 Laravel 表单请求验证,它会发送 422 状态代码以表示验证失败以及错误,以防 AJAX 表单提交。您现在可以做两件事来更改状态代码并从控制台中删除错误消息(仅在这种情况下):

    覆盖 vendor/laravel/framework/src/Illuminate/Foundation/Http/FormRequest.php 中的响应函数,并在新函数中将状态码更改为 200。从那里复制函数并将其粘贴到 app/Http/Requests/Request.php 的 Request 类中。 更改以下行

    return new JsonResponse($errors, 422);
    

    到这样的事情:

    $errors['status'] = 'error'; return new JsonResponse($errors, 200);

    不使用表单请求验证,而是创建一个 Validator 实例以在您的控制器函数中进行验证,并在验证失败时返回 JSON response 并返回 200 状态码。

【讨论】:

正是我想要的。做 #2 完成了这项工作。谢谢。 欢迎您!我已经更新了我的答案,以展示如何使用表单请求验证来执行此操作的示例。【参考方案2】:

从您的代码看来,您正在使用错误代码 422 作为验证错误。这些错误显示在控制台中。您所要做的只是返回 200 表示成功和验证错误。由于验证错误意味着请求成功,因此只有数据是错误的,因此您应该始终为此使用 200 代码。

您可以做的是创建另一个变量,可能是如下所示的响应并检查成功消息中的状态(如果成功或发生验证错误)。其他错误代码仍然可以在错误闭包中处理。

success: function (data) 

    if(data.response == 'success')
       message(data);

    else if(data.response == 'validation-error')
        var errors = $.parseJSON(data.responseText);
        errorsHtml = '<div class="alert alert-danger"><ul>';
        $.each(errors, function (index, value) 
            errorsHtml += '<li>' + value + '</li>';
        );
        errorsHtml += '</ul></div>'
        $('#status_settings').html(errorsHtml);
    

 ,

【讨论】:

以上是关于Laravel - 防止错误显示在控制台中的主要内容,如果未能解决你的问题,请参考以下文章

如何防止参数在Laravel中的控制器方法中注入

我正在向 laravel 中的控制器发送一个发布请求,但它显示 500 错误

Laravel 5.4,AJAX 应该不会出错

使用 Axios 从 laravel 控制器捕获错误

Laravel 自定义控制器出现 404 错误

使用 Laravel 在主布局中输出为空白