【问题标题】:How to send multiple Validation Errors to React using Flask and Marshmallow in Backend and Axios for React-Native in Frontend如何在后端使用 Flask 和 Marshmallow 向 React 发送多个验证错误,在前端使用 Axios 向 React-Native 发送多个验证错误
【发布时间】:2023-03-19 15:44:01
【问题描述】:

我正在使用 Marshmallow 来验证一个简单的 put 请求的传入字段。 现在我正在测试前端的错误处理,以确保为前端发送正确的错误消息。

我通常发送类型的数据

{
 password: string,
 email: string
}

现在,Marshmallow 会检查密码是否足够长,以及电子邮件是否为电子邮件格式。 我在期望语句中收集所有错误并将其发送到前端,如下所示:

    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 错误响应中的前端字段?

【问题讨论】:

  • 好的,我在发现 axios 的问题后找到了答案,并且已经在他们的 github 中记录了:github.com/axios/axios/issues/960 我按照这个线程中的建议更改了我的代码,它起作用了。
  • 那我猜你可以回答你自己的问题并接受你自己的答案。

标签: react-native flask axios marshmallow flask-marshmallow


【解决方案1】:

我在这里找到了解决问题的方法: 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 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2023-01-22
    • 2021-10-18
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    相关资源
    最近更新 更多