Axios请求出错无返回时,无需try/catch的状态判断方案
解决方案
首先修正你代码里的语法错误:await '$nuxt.axios.delete/account' 应该改为 await $nuxt.axios.delete('/account'),字符串包裹的写法是无效的。
要不用try/catch或.catch()就能判断请求状态,可以通过配置axios的validateStatus选项,让它不对任何状态码抛出异常,这样无论请求成功还是失败,都会返回完整的响应对象,你直接通过响应的status字段判断即可:
const response = await $nuxt.axios.delete('/account', { // 配置所有状态码都视为合法,不抛出错误 validateStatus: () => true }); // 根据状态码判断请求是否成功 if (response.status >= 200 && response.status < 300) { // 请求成功,将对象存入数组 yourTargetArray.push(/* 你要存入的对象 */); console.log('请求成功', response); } else { // 请求失败,执行错误逻辑 console.log('请求出错', response); }
原理说明
axios默认会将状态码不在2xx范围内的请求抛出异常,这就是你之前出错时else分支不会执行的原因。通过validateStatus自定义状态码校验规则,返回true会让axios把所有状态的响应都视为成功返回,不会触发异常,你就能直接拿到完整响应,通过status区分成功/失败场景,无需异常捕获逻辑。
如果需要全局生效(所有请求都用这个规则),可以在axios实例初始化时配置:
$nuxt.axios.defaults.validateStatus = () => true;
内容的提问来源于stack exchange,提问作者aworkinghuman
相关产品推荐
相关产品推荐

