http响应状态为400时,使用fetch api获取自定义错误消息

时间:2019-01-27 11:05:12

标签: javascript http fetch-api

我有Python Flask(v 1.0.0)后端,它返回状态为400和自定义错误消息的http响应

return Response('My custom errror message', 400)

在前端,我使用Fetch API对后端进行了API调用:

fetch(url, options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(error => console.log(error));

由于400是BAD REQUEST,所以fetch直达catch,而我只有TypeError: Failed to fetch消息。

如何在前端获取自定义错误消息而不是Failed to fetch消息?它在DevTools中可见,因此希望以某种方式在fetch中可用吗?

enter image description here enter image description here

3 个答案:

答案 0 :(得分:1)

原来是nginx配置问题。我说对了,当响应为400时,抓取直接进入.catch是正确的,但原因是请求实际上失败了–我在控制台中看到CORS错误。 将always参数添加到我的nginx配置后,不再有CORS错误,我可以在My custom error message内访问.then,并且它不再直接进入.catch。 此处有更多详细信息:nginx add headers when returning 400 codes

答案 1 :(得分:0)

如果状态超出200-299范围,则提取不会引发异常。您正在尝试将纯文本(“我的自定义错误消息”)解析为json,这就是导致异常的原因。您必须在致电cmd.exe, taskkill.exe and your batch

之前检查response.status

答案 2 :(得分:-1)

  

fetch仅拒绝有关“网络错误”的承诺(一个令人困惑的术语,但这就是规范所说的内容)。如果从服务器收到http错误,则服务器正在工作并且正在积极处理请求,因此网络错误表示根本无法访问服务器(例如,连接被拒绝或名称未解析)。

所以尝试这个。

 var sql = "INSERT INTO customers (name, id) VALUES ?";
async function build() {
            try {
              const result =await con.queryAsync(sql,[values]);

                 console.log(result);

            } catch (err) {
              // do something
            }
          }
          build();