Laravel 5 API 路由向前端返回 500 错误

Posted

技术标签:

【中文标题】Laravel 5 API 路由向前端返回 500 错误【英文标题】:Laravel 5 API Routes Returning a 500 Error to Frontend 【发布时间】:2015-12-26 03:25:20 【问题描述】:

我正在尝试在 Laravel 5 中启动一个新项目,但遇到了一些路由问题。我以前用过 Laravel 4 做类似的事情,但我是 laravel 5 的新手。

我要做的是创建一个带有 AngularJS 前端的演示应用程序,并将 Laravel 作为后端服务器和数据 API。我已经 gulp 将我的前端构建到 laravel/public/app 中,所以我的结构如下所示:

laravel
 - app/
 - frontend-src/
 - public/
 -- app/
 --- index.php
 --- js/
 --- css/
 --- views/

我将 Laravel 配置为在 laravel/config/view.php 中像这样在 public/app 中查找视图:

'paths' => array(__DIR__.'/../public/app'),

然后我配置我的路由来加载 '/' 的 Angular 索引页面和我的 API 调用的路由组,如下所示:

Route::get('/', function () 
    return view('index');
);

Route::group(array('prefix' => 'api'), function() 

    Route::resource('projects', 'ProjectController');

);

我正在通过使用工匠服务器并使用php artisan serve 运行它来为它提供开发服务 - 这工作正常。索引页面加载,我的 Angular 应用程序可见,主页看起来正确。

但是,当我在主页中添加对 GET /api/projects 的服务调用时,服务器响应为 500 错误

GET http://localhost:8000/api/projects 500 (Internal Server Error)

一开始我以为我命名错误或者路由没有设置,所以我运行了命令 php atisan route:list - 但是路由看起来不错:

+--------+----------+------------------------------+----------------------+------------------------------------------------+------------+
| Domain | Method   | URI                          | Name                 | Action                                         | Middleware |
+--------+----------+------------------------------+----------------------+------------------------------------------------+------------+
|        | GET|HEAD | /                            |                      | Closure                                        |            |
|        | GET|HEAD | api/projects                 | api.projects.index   | App\Http\Controllers\ProjectController@index   |            |
|        | POST     | api/projects                 | api.projects.store   | App\Http\Controllers\ProjectController@store   |            |
|        | GET|HEAD | api/projects/create          | api.projects.create  | App\Http\Controllers\ProjectController@create  |            |
|        | DELETE   | api/projects/projects      | api.projects.destroy | App\Http\Controllers\ProjectController@destroy |            |
|        | PATCH    | api/projects/projects      |                      | App\Http\Controllers\ProjectController@update  |            |
|        | GET|HEAD | api/projects/projects      | api.projects.show    | App\Http\Controllers\ProjectController@show    |            |
|        | PUT      | api/projects/projects      | api.projects.update  | App\Http\Controllers\ProjectController@update  |            |
|        | GET|HEAD | api/projects/projects/edit | api.projects.edit    | App\Http\Controllers\ProjectController@edit    |            |
+--------+----------+------------------------------+----------------------+------------------------------------------------+------------+

在ProjectController中,index方法只有一行:

return Response::json(array('success' => true));

有没有人看到我缺少什么,或者我的 /api 路由不起作用? 谢谢大家的宝贵时间!

【问题讨论】:

ProjectController 的命名空间是否正确? (很抱歉发布一些明显的东西......但是,我根据个人经验询问。) 我是这么认为的,但是我又习惯了 Laravel 4。控制器文件中的命名空间是“namespace App\Http\Controllers;”,它被声明为“class ProjectController extends Controller” . 酷,我最终能够获得更多信息来帮助调试它。感谢您帮助我调查这个问题,@Roger! 【参考方案1】:

结果证明解决方案很简单,它有两个部分。 首先,控制器方法(在本例中为 ProjectController@index)必须返回一些内容。其次,我在开发者控制台中检查“网络”选项卡时发现了一个错误——500 错误正在返回完整响应中的更多信息。

显然,要在 Laravel 5 中使用“Response::json(...)”,您必须通过

包含它
use Response;

或命名类并写\Response::json(...)

我通过 use 语句包含它,并且 API 调用按预期返回。

【讨论】:

【参考方案2】:

您必须将请求设置为 Get 或 Post,如下所示...

Route::get('/', function () 
    return view('index');
);

Route::group(array('prefix' => 'api'), function() 
    Route::resource('projects', 'ProjectController');
    Route::get('projects','ProjectController@projects');
);

现在路由允许您从函数项目返回 json 代码。 PS:如果这不起作用,请告诉我。

【讨论】:

以上是关于Laravel 5 API 路由向前端返回 500 错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel发布路由返回错误500

Laravel - 保护 API 路由

Laravel 5.3 个人访问令牌 500

Laravel 路由器返回错误 500 internal-server-error

Laravel5.5 路由; 500内部服务器错误)

Laravel 404 和 500 的 API 和网站中的不同响应(JSON 和网页)?