我正在尝试向http://localhost:5000/run发送一个帖子请求。如果服务器没有运行,则尝试向客户端抛出“请重试”。
try{
const {data} = await axios.post("http://localhost:5000/run",payload);
setOutput(data.output);
}
catch ({ response }) {
if (response) {
const errMsg = response.data.err.stderr;
setOutput(errMsg);
} else {
setOutput("Please retry submitting.");
}
}
当服务器正在运行时,会收到正确的错误,但当服务器脱机时则不会收到错误。密码里遗漏了什么吗?
发布于 2022-07-08 09:32:18
请尝试以下代码:
import axios from "axios";
import {AxiosError} from 'axios';
axios
.post("http://localhost:5000/run", payload)
.then((response) => setOutput(response.data.output))
.catch((error) => {
if (!error?.response) {
setOutput("No Server Response");
} else if (error?.code === AxiosError.ERR_NETWORK) {
setOutput("Network Error");
} else if (error.response?.status === 404) {
setOutput("404 - Not Found");
} else if (error?.code) {
setOutput("Code: " + error.code);
} else {
setOutput("Unknown Error");
}
});
您可以使用axios.isAxiosError(error)
确保错误是AxiosError的类型。
Axios错误类型:
static readonly ERR_FR_TOO_MANY_REDIRECTS = "ERR_FR_TOO_MANY_REDIRECTS";
static readonly ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE";
static readonly ERR_BAD_OPTION = "ERR_BAD_OPTION";
static readonly ERR_NETWORK = "ERR_NETWORK";
static readonly ERR_DEPRECATED = "ERR_DEPRECATED";
static readonly ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE";
static readonly ERR_BAD_REQUEST = "ERR_BAD_REQUEST";
static readonly ERR_CANCELED = "ERR_CANCELED";
static readonly ECONNABORTED = "ECONNABORTED";
static readonly ETIMEDOUT = "ETIMEDOUT";
发布于 2022-07-08 10:21:35
谢谢你的评论,这是一个解决方案,最终奏效了:
try {
const {data} = await axios.post("http://localhost:5000/run", payload);
setOutput(data.output);
} catch (error) {
if (error.response.data) {
setOutput(error.response.data.err.stderr);
} else {
setOutput("Error connecting to the server!");
}
}
https://stackoverflow.com/questions/72909225
复制相似问题