【问题标题】:post request by axios to laravel giving 500 erroraxios 向 laravel 发布请求,给出 500 错误
【发布时间】: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?
  • 能否提供错误信息。
  • 提供错误...

标签: javascript php laravel-5 vuejs2


【解决方案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 用户尝试以下第二种方法:-

  1. composer require barryvdh/laravel-cors
  2. 将 Cors\ServiceProvider 添加到您的 config/app.php 提供程序的数组 Barryvdh\Cors\ServiceProvider::class,
  3. 要允许所有路由使用 CORS,请在 app/Http/Kernel.php protected $middleware = [ \Barryvdh\Cors\HandleCors::class, ]; 的 $middleware 属性中添加 HandleCors 中间件
  4. 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。
      猜你喜欢
      • 2020-12-07
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 2020-11-19
      • 2019-02-25
      • 1970-01-01
      相关资源
      最近更新 更多