如何在后端使用 Flask 和 Marshmallow 将多个验证错误发送到 React,在前端使用 Axios for React-Native
How to send multiple Validation Errors to React using Flask and Marshmallow in Backend and Axios for React-Native in Frontend
我正在使用 Marshmallow 来验证简单放置请求的传入字段。
现在我正在测试前端的错误处理,以确保我为前端发送了正确的错误消息。
我一般发送
类型的数据
{
password: string,
email: string
}
现在 Marshmallow 检查密码是否足够长以及电子邮件是否为电子邮件格式。
我在 expect 语句中收集所有错误并将其发送到前端,如下所示:
except ValidationError as err:
return make_response(
{"errors": err.messages}, status.HTTP_400_BAD_REQUEST
)
邮递员给我例如此回复:
{
"errors": {
"email": [
"Missing data for required field."
],
"password": [
"Missing data for required field."
],
}
}
因此,所有错误消息都收集在错误字段中并发送回前端。
当错误被发送回前端时,我发现了我的错误,我得到的只是这个对象:
Object {
"data": null,
"error": [Error: Request failed with status code 400],
}
如何正确发送或接收
errors: err.messages
make_response 错误响应中前端的字段?
我在这里找到了问题的解决方案:
github.com/axios/axios/issues/960。
显然,您必须访问发送到 axios 的响应对象或错误对象。不需要拦截器。我改变的是这一行,当解决承诺时:
try {
resolved.data = await promise;
} catch (e) {
resolved.error = e.response.data;
}
在此之前,我通过以下方式访问错误:
try {
resolved.data = await promise;
} catch (e) {
resolved.error = e;
}
错误存储在 response.data
。
我正在使用 Marshmallow 来验证简单放置请求的传入字段。 现在我正在测试前端的错误处理,以确保我为前端发送了正确的错误消息。
我一般发送
类型的数据{
password: string,
email: string
}
现在 Marshmallow 检查密码是否足够长以及电子邮件是否为电子邮件格式。 我在 expect 语句中收集所有错误并将其发送到前端,如下所示:
except ValidationError as err:
return make_response(
{"errors": err.messages}, status.HTTP_400_BAD_REQUEST
)
邮递员给我例如此回复:
{
"errors": {
"email": [
"Missing data for required field."
],
"password": [
"Missing data for required field."
],
}
}
因此,所有错误消息都收集在错误字段中并发送回前端。
当错误被发送回前端时,我发现了我的错误,我得到的只是这个对象:
Object {
"data": null,
"error": [Error: Request failed with status code 400],
}
如何正确发送或接收
errors: err.messages
make_response 错误响应中前端的字段?
我在这里找到了问题的解决方案: github.com/axios/axios/issues/960。 显然,您必须访问发送到 axios 的响应对象或错误对象。不需要拦截器。我改变的是这一行,当解决承诺时:
try {
resolved.data = await promise;
} catch (e) {
resolved.error = e.response.data;
}
在此之前,我通过以下方式访问错误:
try {
resolved.data = await promise;
} catch (e) {
resolved.error = e;
}
错误存储在 response.data
。