我有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
中可用吗?
答案 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();