在laravel中,我们可以按以下方式处理异常:
public function render($request, Exception $exception)
{
if ($exception instanceof ModelNotFoundException or $exception instanceof NotFoundHttpException)
{
if($request->ajax() || $request->wantsJson()) {
return response()->json([
'message' => 'Record not found',
], 404);
}
}
return parent::render($request, $exception);
}
但是,如果发生内部服务器错误,则应用程序将在生产中返回Whoops something went wrong
页面,而在调试中将返回堆栈跟踪。
使用期望json的api时如何处理内部服务器错误?
答案 0 :(得分:0)
您实际上可以在ErrorException
(app / Exceptions / Handler.php)方法内的render()
上添加另一张支票:
public function render($request, Exception $exception)
{
if ($exception instanceof ModelNotFoundException or $exception instanceof NotFoundHttpException)
{
if($request->ajax() || $request->wantsJson())
{
return response()->json([
'message' => 'Record not found',
], 404);
}
}
// ==> Add this check
if ($exception instanceof ErrorException)
{
if($request->ajax() || $request->wantsJson())
{
return response()->json([
'message' => 'Something went wrong on our side',
], 500);
}
}
return parent::render($request, $exception);
}
答案 1 :(得分:0)
这是我的解决方法:
if (!$this->isHttpException($exception))
{
if($request->ajax() || $request->wantsJson())
{
return response()->json([
'message' => 'Something went wrong on our side',
], 500);
}
}
答案 2 :(得分:0)
我遇到了类似的问题,但这是我的 .htaccess 文件,我的配置不正确。 (我的环境是Laravel 5.6,Bitmani LAMP)
.htaccess 必须具有以下内容:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
RewriteBase /
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
对我有用,它修复了我的API中的“内部服务器错误(500)” 。一项建议是,您检查apache日志(error_log和access_log),它们可以为您提供更多信息。
希望对您有帮助。