axios post 判断数据是否有效
axios post to find out if data is valid
好的,我的一天快结束了,我没有在思考。这就是我所拥有的...
一个Laravel控制器,给它发送一个用户名,它告诉我用户名是否可用,如果不可用,它会给我一个422代码
public function checkUsername(Request $request) {
Validator::make($request->all(), [
'name' => ['required', 'string', 'max:255', 'unique:users'],
])->validate();
return response()->json([
'valid' => true,
'data' => [
'message' => 'Username is available!'
]
], 200);
}
有效响应示例:
{"valid":true,"data":{"message":"Username is available!"}}%
要测试的卷曲是:
curl -X POST -H "Content-Type: application/json" -d '{"name": "bossryan"}' http://127.0.0.1:8000/api/checkusername
下一步:我有一个使用 Vee-validate 的前端 Vue。它做了很多事情,但我需要将这个最新的验证添加到组合中,所以如果用户名被占用(我没有从上面得到有效的响应,它需要回复“这个用户名已经被占用”。 =16=]
validateUsername(value) {
// if the field is empty
if (!value) {
return 'This field is required';
}
const regex = /^[a-zA-Z0-9_.+-]{4,20}$/i;
if (!regex.test(value)) {
return 'This must be a minimum of 4 characters';
}
return true;
},
这是我创建的 axios,但它不起作用:
const isUnique = (value) => {
return axios.post('/api/checkusername', { email: value }).then((response) => {
// Notice that we return an object containing both a valid property and a data property.
return {
valid: response.data.valid,
data: {
message: response.data.message
}
};
});
};
我知道我需要添加 axios,但我只是花了很多时间来设置它,而且我的思绪一直在四处奔波。我只是想找一个可以帮我插入上面的axios请求的人//一切都很好,所以我可以完成这个。
感谢社区的帮助!
Vee-validate 似乎想要一个已解决的异步验证承诺。如果状态 >= 400,Axios 将拒绝承诺,因此您需要相应地处理它。
假设当验证失败时响应正文匹配相同的 { valid, data: { message } }
格式,您需要如下内容
const isUnique = (name) =>
axios.post("/api/checkusername", { name })
.then(({ data }) => data)
.catch(err => ({ // resolve with error details
valid: err.response?.data?.valid ?? false,
data: {
// get the message from the response if it exists
message: err.response?.data?.data?.message ?? "Validation failed"
}
}));
export default {
methods: {
async validateUsername(value) {
// do your synchronous checks as per question
const check = await isUnique(value);
return check.valid || check.data.message;
}
}
}
如果 422 响应正文不符合预期,这将提供通用消息“验证失败”。
好的,我的一天快结束了,我没有在思考。这就是我所拥有的...
一个Laravel控制器,给它发送一个用户名,它告诉我用户名是否可用,如果不可用,它会给我一个422代码
public function checkUsername(Request $request) {
Validator::make($request->all(), [
'name' => ['required', 'string', 'max:255', 'unique:users'],
])->validate();
return response()->json([
'valid' => true,
'data' => [
'message' => 'Username is available!'
]
], 200);
}
有效响应示例:
{"valid":true,"data":{"message":"Username is available!"}}%
要测试的卷曲是:
curl -X POST -H "Content-Type: application/json" -d '{"name": "bossryan"}' http://127.0.0.1:8000/api/checkusername
下一步:我有一个使用 Vee-validate 的前端 Vue。它做了很多事情,但我需要将这个最新的验证添加到组合中,所以如果用户名被占用(我没有从上面得到有效的响应,它需要回复“这个用户名已经被占用”。 =16=]
validateUsername(value) {
// if the field is empty
if (!value) {
return 'This field is required';
}
const regex = /^[a-zA-Z0-9_.+-]{4,20}$/i;
if (!regex.test(value)) {
return 'This must be a minimum of 4 characters';
}
return true;
},
这是我创建的 axios,但它不起作用:
const isUnique = (value) => {
return axios.post('/api/checkusername', { email: value }).then((response) => {
// Notice that we return an object containing both a valid property and a data property.
return {
valid: response.data.valid,
data: {
message: response.data.message
}
};
});
};
我知道我需要添加 axios,但我只是花了很多时间来设置它,而且我的思绪一直在四处奔波。我只是想找一个可以帮我插入上面的axios请求的人//一切都很好,所以我可以完成这个。
感谢社区的帮助!
Vee-validate 似乎想要一个已解决的异步验证承诺。如果状态 >= 400,Axios 将拒绝承诺,因此您需要相应地处理它。
假设当验证失败时响应正文匹配相同的 { valid, data: { message } }
格式,您需要如下内容
const isUnique = (name) =>
axios.post("/api/checkusername", { name })
.then(({ data }) => data)
.catch(err => ({ // resolve with error details
valid: err.response?.data?.valid ?? false,
data: {
// get the message from the response if it exists
message: err.response?.data?.data?.message ?? "Validation failed"
}
}));
export default {
methods: {
async validateUsername(value) {
// do your synchronous checks as per question
const check = await isUnique(value);
return check.valid || check.data.message;
}
}
}
如果 422 响应正文不符合预期,这将提供通用消息“验证失败”。