axios 向 laravel 发布请求,给出 500 错误

Posted

技术标签:

【中文标题】axios 向 laravel 发布请求,给出 500 错误【英文标题】:post request by axios to laravel giving 500 error 【发布时间】:2018-08-03 06:33:12 【问题描述】:

我正在使用 Laravel 和 Vue 通过 axios 发出 http 请求。它给出了 500 错误。 我的请求代码是

axios.post('user', 
       first_name: this.user.first_name,
       last_name: this.user.last_name,
       email: this.user.email,
       phone_number: this.user.phone_number,
       is_active: this.user.is_active,
       entity: this.user.entity,
       role_id: this.user.role_id
     )

拉瓦尔路线是

Route::resource('user', 'UserController');

而控制器是

public function store(Request $request)

    $this->validate($request, [
      'first_name' => 'required|max:255',
      'last_name' => 'required|max:255',
      'email' => 'required',
      'is_active' => 'required'
    ]);

    $user = User::create([
      'first_name' => request('first_name'),
      'last_name' => request('last_name'),
      'email' => request('email'),
      'is_active' => request('is_active'),
      'phone_number' => request('phone_number'),
      'role_id' => request('role_id')
    ]);

    return response()->json([
      'user' => $user,
      'message' => 'Success'
    ], 200);


【问题讨论】:

你能试试/user吗?如果这不起作用,请重新检查完整路径是否为/user 能否提供错误信息。 提供错误... 【参考方案1】:
axios.post('/user/store', 
    first_name: this.user.first_name,
    last_name: this.user.last_name,
    email: this.user.email,
    phone_number: this.user.phone_number,
    is_active: this.user.is_active,
    entity: this.user.entity,
    role_id: this.user.role_id
  )
  .then(response =>  
    console.log(response)
 )
 .catch(error => 
   console.log(error.response)
 );

尝试使用此代码并始终使用 error.response 控制台记录您的错误,以获取包含完整错误详细信息的所有信息和对象。在 chrome 控制台中检查表单中的所有 POST 数据是否已正确传递到您的数据库。就我而言,我发现我的电话字段由于拼写错误而没有通过。 My console error Image file

或者您可以为 laravel 用户尝试以下第二种方法:-

    composer require barryvdh/laravel-cors 将 Cors\ServiceProvider 添加到您的 config/app.php 提供程序的数组 Barryvdh\Cors\ServiceProvider::class, 要允许所有路由使用 CORS,请在 app/Http/Kernel.php protected $middleware = [ \Barryvdh\Cors\HandleCors::class, ]; 的 $middleware 属性中添加 HandleCors 中间件 php 工匠供应商:发布 --provider="Barryvdh\Cors\ServiceProvider" php artisan vendor:publish --provider="Barryvdh\Cors\ServiceProvider"

希望对你有帮助:)

【讨论】:

【参考方案2】:

您的存储方法是正确的。你只需要为你的 axios post 请求指定正确的路径,这意味着你的组件方法应该是这样的:

axios.post('/user/store', 
       first_name: this.user.first_name,
       last_name: this.user.last_name,
       email: this.user.email,
       phone_number: this.user.phone_number,
       is_active: this.user.is_active,
       entity: this.user.entity,
       role_id: this.user.role_id
     ).then((res) => 
          // here clear your form and fetch your users list if you want 
     )
       .catch(error => 
          // here catch error messages from laravel validator and show them 
     );

并且您的 store 方法应该返回验证器消息错误:

public function store(Request $request)
   
    $validator = Validator::make($request->all(), [
             'first_name' => 'required|max:255',
             'last_name' => 'required|max:255',
             'email' => 'required',
             'is_active' => 'required'
    ]);
    if ($validator->fails()) 
        return response()->json(['errors'=>$validator->errors()],422);
    

    $user = User::create([
      'first_name' => $request('first_name'),
      'last_name' => $request('last_name'),
      'email' => $request('email'),
      'is_active' => $request('is_active'),
      'phone_number' => $request('phone_number'),
      'role_id' => $request('role_id')
    ]);

    return response()->json([
      'user' => $user,
      'message' => 'Success'
    ], 200);

【讨论】:

【参考方案3】:

尝试更改以下代码块:

$user = User::create([
  'first_name' => request('first_name'),
  'last_name' => request('last_name'),
  'email' => request('email'),
  'is_active' => request('is_active'),
  'phone_number' => request('phone_number'),
  'role_id' => request('role_id')
]);

替换为以下内容:

$user = User::create([
  'first_name' => $request->input('first_name'),
  'last_name' => $request->input('last_name'),
  'email' => $request->input('email'),
  'is_active' => $request->input('is_active'),
  'phone_number' => $request->input('phone_number'),
  'role_id' => $request->input('role_id')
]);

【讨论】:

request->input 应该是$request->input,对吧? @kerbholz 是的,你是对的,我已经纠正了我的建议。谢谢! 不工作。给出以下错误 POST localhost/lms-dev/public/user 500(内部服务器错误)错误:在 XMLHttpRequest.handleLoad (app.js:19852) 结算 (app.js:47695) 处的 createError (app.js:19978) 请求失败,状态码为 500 @HasanRaza 您是否使用了一些前端框架,例如 Angular 或其他。 @amitrawat 我正在使用 Vue.js。

以上是关于axios 向 laravel 发布请求,给出 500 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5.5 上使用 axios 发布请求

带有 axios 和 vue 的 laravel 5.8 中的 CSRF

无法使用 axios 向 Laravel 应用程序发帖

Laravel PATCH 请求不读取 Axios 表单数据

(axios) HTTP POST 请求两分钟后失败,Laravel 5 + VueJS

Axios CORS/Preflight 因 Laravel 5.4 API 调用而失败