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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
云解析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星球有多牛逼


相关文章
|
2月前
|
域名解析 网络协议 开发工具
阿里云DNS常见问题之访问重定向的url访问有问题如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
2月前
|
缓存 负载均衡 网络协议
阿里云DNS常见问题之某个地域访问不到如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
11天前
|
JSON 文字识别 数据格式
文本,文识11,解析OCR结果,paddOCR返回的数据,接口返回的数据有code,data,OCR返回是JSON的数据,得到JSON数据先安装依赖,Base64转换工具网站在21.14
文本,文识11,解析OCR结果,paddOCR返回的数据,接口返回的数据有code,data,OCR返回是JSON的数据,得到JSON数据先安装依赖,Base64转换工具网站在21.14
文本,文识11,解析OCR结果,paddOCR返回的数据,接口返回的数据有code,data,OCR返回是JSON的数据,得到JSON数据先安装依赖,Base64转换工具网站在21.14
|
20天前
|
弹性计算 运维 Java
解决方案测评(高效构建企业门户网站方案)基于ecs&云效&云解析DNS&VPC结合的自搭建方案报告
该文档是一个关于使用ECS、云效、云解析DNS和VPC结合的自搭建方案报告。主要内容包括前言部分,可能详细探讨了如何集成这些阿里云服务以构建自定义系统。由于提供的内容有限,具体的实施方案和细节未在摘要中体现。
170 2
|
13天前
|
JavaScript API
vue 异步网络请求 axios 【实用教程】(含访问本地接口)
vue 异步网络请求 axios 【实用教程】(含访问本地接口)
17 0
|
2月前
|
C++
C++ 类的访问修饰符:深入解析
C++ 类的访问修饰符:深入解析
22 1
|
2月前
|
API 数据库 数据安全/隐私保护
蓝奏云直链获取在线解析网站源码
蓝奏云直链获取在线解析网站源码 蓝奏云链接解析 本地API接口 支持有无密码和短期直链和永久直链,同时还可以显示文件名和大小。 这个解析器无需数据库即可搭建,API接口已经本地化,非常简单易用。
70 2
蓝奏云直链获取在线解析网站源码
|
2月前
|
人工智能 自然语言处理 搜索推荐
只用文本,3分钟生成一个网站!首个ChatGPT版网站开发平台
【2月更文挑战第30天】Dora AI是一个创新的生成式AI网站开发平台,让用户通过文本输入快速创建各类网站,无需模板,支持动态生成和个性化定制。平台提供直观的拖拽编辑,降低使用门槛,3分钟内即可生成网页。用户输入提示词或选择“Surprise Me”可获得不同风格的页面。尽管部分高级功能需会员,但基本编辑功能对所有用户开放。Dora AI正研发更多高级功能,如文本生成动画和3D网站,以提升用户体验。
93 2
只用文本,3分钟生成一个网站!首个ChatGPT版网站开发平台
|
2月前
|
XML 存储 开发框架
c#教你网站数据轻松解析抓取,HtmlAgilityPack解析的奇妙之处
c#教你网站数据轻松解析抓取,HtmlAgilityPack解析的奇妙之处
52 0
|
2月前
|
人工智能 API UED
汇总:5个国产版chatgpt中文网站,可用来写代码文章小说
目前已经有一些替代方案,使得中国用户也能够在国内网络条件下使用ChatGPT。这些站点通过调用ChatGPT的API接口,实现了对语言模型的调用,为用户提供了类似于原版ChatGPT的功能和体验。
273 3

推荐镜像

更多