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 错误的主要内容,如果未能解决你的问题,请参考以下文章
带有 axios 和 vue 的 laravel 5.8 中的 CSRF
Laravel PATCH 请求不读取 Axios 表单数据