axios访问网站出现了错误, 如何解析错误呢? ChatGPT告诉你

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 使用可选链操作符(?.)可以让代码更加简洁。如果你的运行环境已经支持ES2020语法,那么可以直接使用可选链操作符来获取嵌套属性,就像这样:

牙叔教程 简单易懂

我是用axios访问网站, 如果出现了错误, 怎么提取错误信息?

ChatGPT答

在axios的响应拦截器中,可以通过判断HTTP状态码或者自定义的错误码来提取错误信息。示例代码如下:


import axios from 'axios';


// 创建axios实例

const instance = axios.create({

 baseURL: 'https://example.com',

});


// 添加响应拦截器

instance.interceptors.response.use(

 response => {

   // 请求成功时的操作


   return response;

 },

 error => {

   // 请求失败时的操作

   if (error.response) {

     // HTTP错误状态码

     console.log(error.response.status);

     // 错误信息

     console.log(error.response.data.message);

   } else if (error.request) {

     // 没有收到响应

     console.log(error.request);

   } else {

     // 其他错误

     console.log('Error', error.message);

   }

   return Promise.reject(error);

 }

);


// 发送请求

instance.get('/api/data').catch(error => {

 // 处理请求失败的情况

});


以上是一种基本处理方式,具体根据项目和接口的不同自行调整。

他还用了拦截器, 我不想用拦截器, 再问


我不想使用拦截器

ChatGPT答

如果您不想使用拦截器,可以在请求失败的回调函数中直接获取错误信息。示例代码如下:


import axios from 'axios';


// 发送请求

axios.get('https://example.com/api/data')

 .then(response => {

   // 处理请求成功的情况

 })

 .catch(error => {

   if (error.response) {

     // HTTP错误状态码

     console.log(error.response.status);

     // 错误信息

     console.log(error.response.data.message);

   } else if (error.request) {

     // 没有收到响应

     console.log(error.request);

   } else {

     // 其他错误

     console.log('Error', error.message);

   }

   // 处理请求失败的情况

 });


这样就可以直接在请求失败的回调函数中获取到错误信息了。注意,在请求失败时,error对象包含很多信息,需要通过判断来确定错误类型并提取相应的信息。

看着还挺正常的, 我问问他为啥和我的不一样


为什么别人访问ChatGPT的api发生错误是这样解析的?

e.response.data.error.message

.catch((e) => {

 console.log("axios发生错误");

 let errorMsg = e?.response?.data?.error?.message ? e.response.data.error.message : e.message;

 console.log(errorMsg);

});

而你是这样解析的: error.response.data.message

ChatGPT答

在使用axios访问API时,错误的返回格式是由后端接口定义的。因此,不同的API可能会有不同的错误信息格式。


一般来说,当请求失败时,error.response表示服务器响应错误,它包含以下几个属性:


  • status:HTTP状态码。
  • data:响应数据。
  • headers:响应头部。
  • config:请求配置对象。


如果服务器返回的错误信息中包含了一个名为error的字段,并且该字段还包含了一个名为message的子字段,那么可以通过以下代码获取到该错误消息:


let errorMsg = e?.response?.data?.error?.message ? e.response.data.error.message : e.message;


如果服务器返回的错误信息没有这样的结构,那么就需要根据实际情况进行处理。


还有没有更好的提取错误消息的方法?

ChatGPT答

除了使用三元表达式来提取错误消息之外,还有一个更简洁的方法是使用lodash库中的get()函数。该函数可以在对象中安全地获取嵌套属性并避免抛出异常。示例如下:


import axios from 'axios';

import { get } from 'lodash';


// 发送请求

axios.get('https://example.com/api/data')

 .then(response => {

   // 处理请求成功的情况

 })

 .catch(error => {

   const errorMsg = get(error, 'response.data.error.message', error.message);

   console.log(errorMsg);

   // 处理请求失败的情况

 });


上述代码中,通过调用get()函数从error对象中安全地获取response.data.error.message属性值,并在无法获取时返回error.message作为默认值。


这种方式比使用三元表达式更加简洁可读,同时也更灵活。如果后端接口返回的错误信息格式发生了变化,只需要修改一行代码即可适应新的格式。

不是我想要的答案, 我要吐槽它


感觉不如 ?. 简洁呢

ChatGPT答

确实,使用可选链操作符(?.)可以让代码更加简洁。如果你的运行环境已经支持ES2020语法,那么可以直接使用可选链操作符来获取嵌套属性,就像这样:


import axios from 'axios';


// 发送请求

axios.get('https://example.com/api/data')

 .then(response => {

   // 处理请求成功的情况

 })

 .catch(error => {

   const errorMsg = error?.response?.data?.error?.message ?? error.message;

   console.log(errorMsg);

   // 处理请求失败的情况

 });


上述代码中,使用了可选链操作符来获取error.response.data.error.message属性值,并在无法获取时返回error.message作为默认值。


需要注意的是,虽然可选链操作符非常方便,但它不适用于所有情况。在一些特殊的场景下,比如需要对获取到的属性值进行修改或传递给其他函数等操作时,可能需要使用其他方式来处理。

这个答案, 比三元表达式简洁啊, 我决定就用ChatGPT给的这个答案了

公众号 牙叔教程

这个ChatGPT星球有多牛逼


相关文章
|
5月前
|
域名解析 网络协议 安全
在Linux中,想在命令行下访问某个网站,并且该网站域名还没有解析,如何做?
在Linux中,想在命令行下访问某个网站,并且该网站域名还没有解析,如何做?
|
6月前
|
存储 弹性计算 大数据
阿里云服务器怎么样?全访问解析云服务器ECS功能、租用、优缺点及使用说明
阿里云ECS是弹性计算服务,提供安全可靠的云服务器,包括多种实例规格如经济型、通用型、计算型等,适合不同场景。ECS支持VPC专有网络、快照与镜像、多种付费模式。用户可根据业务需求选择实例、存储类型和网络配置。阿里云服务器适用于Web应用、游戏、大数据和深度学习等场景,提供免费试用和不同优惠套餐。众多知名企业如新浪微博等信赖阿里云服务。更多信息可访问阿里云官方网站。
305 5
|
2月前
|
网络协议 安全 文件存储
动态DNS(DDNS)技术在当前网络环境中日益重要,它允许使用动态IP地址的设备通过固定域名访问
动态DNS(DDNS)技术在当前网络环境中日益重要,它允许使用动态IP地址的设备通过固定域名访问,即使IP地址变化,也能通过DDNS服务保持连接。适用于家庭网络远程访问设备及企业临时或移动设备管理,提供便捷性和灵活性。示例代码展示了如何使用Python实现基本的DDNS更新。尽管存在服务可靠性和安全性挑战,DDNS仍极大提升了网络资源的利用效率。
108 6
|
4月前
|
安全 网络安全 API
无需公网也可访问的ChatGPT WebUI服务
通过阿里云计算巢实现无需开启公网访问即可使用的ChatGPTWebUI服务。借助WEB安全代理功能保障安全,无公网费用,适合个人与团队内部使用。
|
3月前
|
前端开发 JavaScript UED
axios取消请求CancelToken的原理解析及用法示例
axios取消请求CancelToken的原理解析及用法示例
236 0
|
3月前
|
弹性计算 网络协议 网络安全
内网DNS解析&VPN网关联动实现云上访问云下资源
内网DNS解析&VPN网关联动实现云上访问云下资源
|
3月前
|
域名解析 缓存 网络协议
Windows系统云服务器自定义域名解析导致网站无法访问怎么解决?
Windows系统云服务器自定义域名解析导致网站无法访问怎么解决?
|
3月前
|
网络安全 Docker 容器
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
115 0
|
4月前
|
编译器 Linux C语言
不对齐的内存访问 【ChatGPT】
不对齐的内存访问 【ChatGPT】
73 11
|
5月前
|
测试技术 Linux Shell
ChatGPT访问难?ChatGLM+花生壳打造可远程访问的平替方案
ChatGPT虽强大,但访问受限。清华大学开源的ChatGLM提供了一种解决方案:用户可根据需求部署私有化的对话服务,支持中英文交互。与ChatGPT不同,ChatGLM便于定制与训练,并能获取已训练模型。结合贝锐花生壳等内网穿透工具,可轻松实现ChatGLM-webui远程访问,无需固定公网IP或路由配置,适用于测试及实际项目,有效规避了访问难题。
82 3

推荐镜像

更多