想不通,明明配置里有 API_debug 项,dingo 为什么还要在异常时默认返回 message?

任何代码中没有catch的exception,都会被dingo接管,格式化一个错误的信息返回。其中里面包含一个message,就是exception的message。很多情况下,这些信息是不应该给外界看到的。开发者开发的时候看看这些信息就好了。
Dingo明明自身就有api_debug配置项,结果它干了什么?——message在不开启api_debug的情况下也会返回,而开启debug后,区别在于多返回了trace信息。
真是想不通,为什么要这样设计!
你有这个配置项了,当开发者想调试,想看错误信息的时候,自己开启debug不行吗,为什么要默认返回message?

另求一个此问题的解决方案。在我看来,遇到没有catch的exception时,直接响应一个http 500足矣,其他的什么都别给人看。

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案
// config/api.php

<?php

$config = [
    ......

    'errorFormat' => [
        'errors' => ':errors',
        'code' => ':code',
        'status_code' => ':status_code',
        'debug' => ':debug',
    ],

    ......
];

if (env('API_DEBUG')) {
    $config['errorFormat']['message'] = ':message';
}

return $config;
4年前 评论
萧风 4年前
讨论数量: 5

config/api.php 中把这一行注释掉如何?

file

4年前 评论

@varro 之前还真没留意到这个配置。不过,如果去掉这里,开发的时候又不方便调试了。开了debug也不会有message看,光trace可读性不高。
最好还是能把message放到debug中去就好了,毕竟debug配置可以放到env中,不受开发/生产环境影响。

4年前 评论
    'errorFormat' => [
        'message'     => call_user_func(function () {
            return env('API_DEBUG') ? ':message' : '......';
        }),
        'errors'      => ':errors',
        'code'        => ':code',
        'status_code' => ':status_code',
        'debug'       => ':debug',
    ],
4年前 评论

@varro 小杠一下,不要打我哈——现在如果关了api_debug,还是会有个空的message项,很碍眼。
想用闭包函数把整个‘message’ => ':message'项都包进去,但是不知道该怎么做。 :sweat_smile:

4年前 评论
// config/api.php

<?php

$config = [
    ......

    'errorFormat' => [
        'errors' => ':errors',
        'code' => ':code',
        'status_code' => ':status_code',
        'debug' => ':debug',
    ],

    ......
];

if (env('API_DEBUG')) {
    $config['errorFormat']['message'] = ':message';
}

return $config;
4年前 评论
萧风 4年前

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