我刚刚开始研究一个API,它是一个NodeJS应用程序,它使用Hapi,后者又使用Boom。繁荣是伟大的,但它隐藏了一些我希望看到的错误。
在我的Mac上本地工作,我打开2个终端窗口。在一个终端我运行" npm start"它使API在本地运行。在另一个终端中,我使用此cURL调用测试API:
curl 'http://needi.local:8080/search/uber' -X GET --header 'Accept: application/json' --header 'x-api-key: 2gt7Pt2LU194KKcNnc'
这很棒!我得到了我期望的所有数据。
所以现在我把它放在一个bash脚本中:
#!/usr/bin/ sh
curl 'http://needi.local:8080/search/uber' -X GET --header 'Accept: application/json' --header 'x-api-key: 2gt7Pt2LU194KKcNnc'
现在我运行它而不是获取数据,我得到了这个:
% Total % Received % Xferd Average Speed Time Time
Time Current
Dload Upload Total Spent
Left Speed
100 109 100 109 0 0 3858 0 --:--:-- --:--:--
--:--:-- 3892
{
"statusCode": 500,
"error": "Internal Server Error",
"message": "An internal server error occurred"
}
此消息似乎是从Boom生成的。当我grep代码时,我只看到来自Boom的这条消息。该消息如下所述:
https://github.com/hapijs/boom
这一切都很好,直到某一点。如果出现问题,Boom应该发回该消息。没关系。
但无论问题是什么,它都不会出现在我运行应用程序的其他终端窗口中。我希望堆栈跟踪能够显示出来,但它并不存在。
所以也许Boom吞下这个错误?如何让错误出现在日志中(运行API的终端)。
或许Boom是无辜的。也许这仅仅是一个未被捕获的异常案例?
答案 0 :(得分:1)
您可能想看看在您的 JavaScript 文件中实现繁荣的方式。
根据 official 繁荣文档:
<块引用>所有 500 个错误都会对最终用户隐藏您的消息。
此外,文档还解释了如果没有在动臂对象中设置状态代码会发生什么:
<块引用>如果尚未设置状态代码,则默认为 500。
默认为 500 错误代码是一种安全措施,可防止将实际错误暴露给客户端。