使用 axios vuejs 和 laravel 验证表单
Validating forms with axios vuejs and laravel
我正在尝试将一些表单数据发送到我的后端,但是使用 Laravel 进行验证并不是 returning 422 状态错误。
Axios
简单的 axios post 请求 URL,如果我们在请求周期中发现错误,希望得到响应。
axios.post(this.formURL, formData)
.then((response) => {
console.log(response)
})
.catch((err) => {
console.log(err)
})
Laravel
我已经设置了 Laravel 验证来验证一些表单输入,如果验证失败则 return 422。
try {
$this->validate(request(), [
'chapter_id' => 'required',
'brother_id' => 'required'
]);
Minute::forceCreate(request());
return response()->json([
'status' => 'success',
'message' => 'Minute Created',
], 201);
}
catch (ValidationException $exception) {
return response()->json([
'status' => 'error',
'message' => 'Error',
'errors' => $exception->errors(),
], 422);
}
回应
已给出响应,但当我尝试通过控制台输出时,我在控制台中得到 undefined:
{
"status":"error",
"message":"Error",
"errors":{
"brother_id":[
"The brother_id field is required."
],
"chapter_id":[
"The chapter_id field is required."
]
}
}
我在这里遇到过这个问题 https://github.com/axios/axios/issues/960#issuecomment-398269712 但无法使用他们的解决方法解决这个问题。有没有人遇到过这个问题?这可能是身份验证关系(不太可能),这是我实施的最后一件事。
分辨率
此问题已解决。在实施 axios 拦截器以捕获身份验证错误时,我没有 return 将错误返回给 Promise。
axios.interceptors.response.use(null, (error) => {
if ( error.response.status == 401 ) {
store.commit('logout')
router.push('/login')
}
return Promise.reject(error)
})
return Promise.reject(error)
不见了。 感谢大家的帮助!
我认为信息很清楚 ("The chapter_id field is required.")。看来问题不是axios的结果,而是相关的数据值没有传到服务端。请使用
检查数据是否传输到服务器
return $ request;
服务器端命令(控制器启动)。如果没有传输数据,请仔细检查前端。如果传输数据尝试更改范围。
try {
$this->validate(request(), [
'chapter_id' => 'required',
'brother_id' => 'required'
]);
}
catch (ValidationException $exception) {
return response()->json([
'status' => 'error',
'message' => 'Error',
'errors' => $exception->errors(),
], 422);
}
Minute::forceCreate(request());
return response()->json([
'status' => 'success',
'message' => 'Minute Created',
], 201);
所以调试它。
我正在尝试将一些表单数据发送到我的后端,但是使用 Laravel 进行验证并不是 returning 422 状态错误。
Axios
简单的 axios post 请求 URL,如果我们在请求周期中发现错误,希望得到响应。
axios.post(this.formURL, formData)
.then((response) => {
console.log(response)
})
.catch((err) => {
console.log(err)
})
Laravel
我已经设置了 Laravel 验证来验证一些表单输入,如果验证失败则 return 422。
try {
$this->validate(request(), [
'chapter_id' => 'required',
'brother_id' => 'required'
]);
Minute::forceCreate(request());
return response()->json([
'status' => 'success',
'message' => 'Minute Created',
], 201);
}
catch (ValidationException $exception) {
return response()->json([
'status' => 'error',
'message' => 'Error',
'errors' => $exception->errors(),
], 422);
}
回应
已给出响应,但当我尝试通过控制台输出时,我在控制台中得到 undefined:
{
"status":"error",
"message":"Error",
"errors":{
"brother_id":[
"The brother_id field is required."
],
"chapter_id":[
"The chapter_id field is required."
]
}
}
我在这里遇到过这个问题 https://github.com/axios/axios/issues/960#issuecomment-398269712 但无法使用他们的解决方法解决这个问题。有没有人遇到过这个问题?这可能是身份验证关系(不太可能),这是我实施的最后一件事。
分辨率
此问题已解决。在实施 axios 拦截器以捕获身份验证错误时,我没有 return 将错误返回给 Promise。
axios.interceptors.response.use(null, (error) => {
if ( error.response.status == 401 ) {
store.commit('logout')
router.push('/login')
}
return Promise.reject(error)
})
return Promise.reject(error)
不见了。 感谢大家的帮助!
我认为信息很清楚 ("The chapter_id field is required.")。看来问题不是axios的结果,而是相关的数据值没有传到服务端。请使用
检查数据是否传输到服务器return $ request;
服务器端命令(控制器启动)。如果没有传输数据,请仔细检查前端。如果传输数据尝试更改范围。
try {
$this->validate(request(), [
'chapter_id' => 'required',
'brother_id' => 'required'
]);
}
catch (ValidationException $exception) {
return response()->json([
'status' => 'error',
'message' => 'Error',
'errors' => $exception->errors(),
], 422);
}
Minute::forceCreate(request());
return response()->json([
'status' => 'success',
'message' => 'Minute Created',
], 201);
所以调试它。