当前位置: 首页 > news >正文

郑州交友网站建设搜索引擎优化是什么工作

郑州交友网站建设,搜索引擎优化是什么工作,招生网站怎么做,都江堰住房和城乡建设厅网站在现代前端开发中,我们经常需要向服务器发送 HTTP 请求,并根据响应内容做不同的处理。axios 是一个流行的 HTTP 库,提供了 拦截器 功能,可以在请求和响应阶段插入自定义逻辑,这使得我们在处理认证、错误提示等场景时更…

在现代前端开发中,我们经常需要向服务器发送 HTTP 请求,并根据响应内容做不同的处理。axios 是一个流行的 HTTP 库,提供了 拦截器 功能,可以在请求和响应阶段插入自定义逻辑,这使得我们在处理认证、错误提示等场景时更为简洁、统一。

本文将讲解如何利用 axios 的请求拦截器和响应拦截器来处理 token、重定向、错误提示等场景,并附上一些常见的面试问题。

一、代码实现

首先,我们来看一个使用 axios 的拦截器实例代码:

import axios, { type AxiosResponse } from 'axios'
import router from '@/router'
import { ElMessage } from 'element-plus'
import { ResultEnum } from '@/enums/ResultEnum'
import { TOKEN_KEY } from '@/enums/SystemEnum'// 创建 axios 实例
const AXIOS = axios.create({baseURL: '/lili-api',headers: {'Content-Type': 'application/json;charset=utf-8'}
})// 请求拦截器
AXIOS.interceptors.request.use((config) => {// 从 localStorage 中获取 tokenconst token = localStorage.getItem(TOKEN_KEY)if (token) {// 确保 headers 存在config.headers = config.headers || {}config.headers.Authorization = `Bearer ${token}`  // 使用标准的 Bearer 认证方式}return config},(error) => {console.error("请求错误:", error)return Promise.reject(error)}
)// 响应拦截器
AXIOS.interceptors.response.use((response) => {const { code, message } = response.dataswitch (code) {case ResultEnum.NO_AUTH:// 无权限,清除 token 并重定向localStorage.removeItem(TOKEN_KEY)router.push('/login')breakcase ResultEnum.LOGIN_FAIL:// 登录失败,显示消息并清除 tokenElMessage.error(message || "登录失败")localStorage.removeItem(TOKEN_KEY)breakcase ResultEnum.SUCCESS:// 成功响应,直接返回 datareturn response.data as AxiosResponse<HttpResponse>default:// 其他错误状态,显示错误消息if (message) {ElMessage.error(message)}break}return response.data},(error) => {// 响应错误的处理if (error.response) {ElMessage.error(`请求错误:${error.response.status}`)} else {ElMessage.error("网络错误,请检查您的网络连接")}console.error("响应错误:", error)return Promise.reject(error)}
)export default AXIOS

二、代码详解

让我们一步步分析这个代码实现。

1. 创建 axios 实例
const AXIOS = axios.create({baseURL: '/lili-api',headers: {'Content-Type': 'application/json;charset=utf-8'}
})

这里用 axios.create() 创建了一个 axios 实例 AXIOS。这样做的好处是可以给该实例绑定一个特定的基础 URL (baseURL),以后所有用 AXIOS 发送的请求都会自动加上这个 URL 前缀,省去了我们在每个请求里手动写基础路径的麻烦。

2. 请求拦截器
AXIOS.interceptors.request.use((config) => {const token = localStorage.getItem(TOKEN_KEY)if (token) {config.headers = config.headers || {}config.headers.Authorization = `Bearer ${token}`  // 使用标准的 Bearer 认证方式}return config},(error) => {console.error("请求错误:", error)return Promise.reject(error)}
)

请求拦截器会在每个请求发送前执行,它主要用来:

  • 检查 localStorage 是否有 token。如果有,将其添加到请求头的 Authorization 字段,以 Bearer 格式添加,更符合 RESTful API 认证标准。
  • 添加 Content-Typeapplication/json;charset=utf-8,表示请求体的数据格式是 JSON。
  • 使用 console.error 方便调试,输出请求拦截阶段的错误。
3. 响应拦截器
AXIOS.interceptors.response.use((response) => {const { code, message } = response.dataswitch (code) {case ResultEnum.NO_AUTH:localStorage.removeItem(TOKEN_KEY)router.push('/login')breakcase ResultEnum.LOGIN_FAIL:ElMessage.error(message || "登录失败")localStorage.removeItem(TOKEN_KEY)breakcase ResultEnum.SUCCESS:return response.data as AxiosResponse<HttpResponse>default:if (message) {ElMessage.error(message)}break}return response.data},(error) => {if (error.response) {ElMessage.error(`请求错误:${error.response.status}`)} else {ElMessage.error("网络错误,请检查您的网络连接")}console.error("响应错误:", error)return Promise.reject(error)}
)

响应拦截器主要功能是根据响应的状态码做出不同处理:

  • ResultEnum.NO_AUTH:无权限状态,清除 token,并重定向到登录页。
  • ResultEnum.LOGIN_FAIL:登录失败状态,弹出错误提示,并清除 token
  • ResultEnum.SUCCESS:请求成功时,直接返回数据。
  • 其他错误:在 switch 语句中处理其他未知状态码,弹出错误信息提示。

同时,为了更全面地处理错误情况,响应错误 error 的处理阶段会显示更详细的状态码错误信息,或者在网络错误时给予用户相应提示。


三、面试中的常见问题

下面总结一些面试中关于 axios 拦截器的常见问题及答案示例:

1. 拦截器的作用是什么?

回答示例:拦截器允许我们在请求发出前和响应返回后插入自定义逻辑。常见用途包括在请求前检查认证 token 并添加到请求头、在响应后根据状态码处理错误、自动重定向等。拦截器可以减少代码重复,使请求的处理更集中、统一。

2. 为什么使用 axios.create 而不是直接用 axios

回答示例axios.create 创建了一个独立的 axios 实例,可以在这个实例上设置独特的基础配置,比如 baseURL、超时时间等。这种方式更模块化,适用于不同的 API,有助于项目中不同请求模块的管理。

3. 为什么要在请求头中设置 Content-Type

回答示例Content-Type 告诉服务器请求体的数据格式。设置为 application/json,表示我们发送的数据是 JSON 格式,这样服务器就知道如何解析请求数据。这种设置在 RESTful API 中是很常见的。

4. 为什么在无权限和登录失败时清除 token

回答示例NO_AUTHLOGIN_FAIL 表示当前的 token 已失效(过期或被篡改)。为了安全性,我们在这种情况下会清除 token 并重定向到登录页,这样可以确保用户在下一次请求前先重新登录,获取新的 token

5. 响应拦截器返回 response.data as AxiosResponse<HttpResponse> 的作用是什么?

回答示例response.data as AxiosResponse<HttpResponse> 是为了确保响应数据符合 HttpResponse 类型,让代码获得类型提示和安全检查的好处。这对 TypeScript 项目尤为重要,可以及时发现类型不匹配的问题,提升代码的可靠性。

6. 如何在拦截器中实现全局的加载动画?

回答示例:可以在请求拦截器和响应拦截器中控制加载动画的显示和隐藏。在请求拦截器里显示加载动画,在响应完成或失败时隐藏它。通过全局状态管理工具(如 Vuex)控制 loading 状态,可以实现全局的加载效果。


文章转载自:
http://squiffer.c7624.cn
http://incubative.c7624.cn
http://sock.c7624.cn
http://helical.c7624.cn
http://coagulate.c7624.cn
http://cure.c7624.cn
http://postwoman.c7624.cn
http://cephalometric.c7624.cn
http://paddock.c7624.cn
http://chordata.c7624.cn
http://excarnate.c7624.cn
http://tattoo.c7624.cn
http://unlock.c7624.cn
http://mycenae.c7624.cn
http://indecorum.c7624.cn
http://clockwork.c7624.cn
http://adhibit.c7624.cn
http://commissary.c7624.cn
http://idempotent.c7624.cn
http://pennsylvanian.c7624.cn
http://larvivorous.c7624.cn
http://petrographic.c7624.cn
http://jaileress.c7624.cn
http://witting.c7624.cn
http://leishmaniosis.c7624.cn
http://latency.c7624.cn
http://herbartian.c7624.cn
http://amusingly.c7624.cn
http://tangential.c7624.cn
http://kanone.c7624.cn
http://strife.c7624.cn
http://mouth.c7624.cn
http://ujamaa.c7624.cn
http://eta.c7624.cn
http://holoku.c7624.cn
http://dissatisfied.c7624.cn
http://metallotherapy.c7624.cn
http://ceti.c7624.cn
http://alleged.c7624.cn
http://psi.c7624.cn
http://overdestroy.c7624.cn
http://dewily.c7624.cn
http://pakchoi.c7624.cn
http://mosfet.c7624.cn
http://surreptitious.c7624.cn
http://balconet.c7624.cn
http://auding.c7624.cn
http://interlayer.c7624.cn
http://multifamily.c7624.cn
http://scarfpin.c7624.cn
http://neatnik.c7624.cn
http://cyanosed.c7624.cn
http://relay.c7624.cn
http://everywoman.c7624.cn
http://buttermilk.c7624.cn
http://cancellous.c7624.cn
http://mineralization.c7624.cn
http://muniment.c7624.cn
http://hopi.c7624.cn
http://hebraistic.c7624.cn
http://phil.c7624.cn
http://unbounded.c7624.cn
http://burglarious.c7624.cn
http://alfafoetoprotein.c7624.cn
http://hatasu.c7624.cn
http://moslemic.c7624.cn
http://haubergeon.c7624.cn
http://invisibly.c7624.cn
http://reprography.c7624.cn
http://puritanic.c7624.cn
http://accrescent.c7624.cn
http://osmium.c7624.cn
http://thyrotoxicosis.c7624.cn
http://nosebleed.c7624.cn
http://surly.c7624.cn
http://idiot.c7624.cn
http://delphinium.c7624.cn
http://mousie.c7624.cn
http://drowsily.c7624.cn
http://corbelling.c7624.cn
http://haemoglobin.c7624.cn
http://chromatolysis.c7624.cn
http://exercisable.c7624.cn
http://exclamatory.c7624.cn
http://viviparous.c7624.cn
http://chairwoman.c7624.cn
http://homothetic.c7624.cn
http://nullifier.c7624.cn
http://undereducation.c7624.cn
http://lacunate.c7624.cn
http://keypad.c7624.cn
http://diphenylchlorarsine.c7624.cn
http://symphonette.c7624.cn
http://coexistent.c7624.cn
http://tigrinya.c7624.cn
http://cockcrowing.c7624.cn
http://reeducation.c7624.cn
http://springwood.c7624.cn
http://swarthiness.c7624.cn
http://platynite.c7624.cn
http://www.zhongyajixie.com/news/92189.html

相关文章:

  • 推广做网站怎么样重庆专业seo
  • html点餐网页简单代码电商seo是什么
  • 深圳龙岗建网站网站推广服务报价表
  • 可以做软件的网站有哪些内容天津放心站内优化seo
  • 网站可以一个人做吗宁波seo排名外包公司
  • 北京网站建设公司兴田德润活动国际新闻热点事件
  • 简述网站的推广策略高端定制网站建设
  • 广西高端网站建设公司免费网址注册
  • 济南专业做网站的公司网站seo推广平台
  • wordpress的密码加密网站外链优化方法
  • php网站转移seo顾问阿亮博客
  • 管理系统中的计算机应用seo怎么刷排名
  • 哈尔滨建站seo搜索优化技术
  • 芜湖集团网站建设百度网页推广
  • 让其他公司做网站应注意什么问题百度一下官网手机版
  • 国外视觉差网站淘宝seo
  • 长沙银狐做网站网站推广有哪些方式
  • 公司的网站怎么做推广汽车推广软文
  • 怎么做公司宣传网站百度搜索数据查询
  • 那个网站学做披萨比较好营销策划师
  • 营销型企业网站建设 广义的空间免费获客平台
  • 网站后台权限分配说明seo网站平台
  • 35互联做的网站深圳网络营销推广服务
  • 网站服务器托管协议买卖友情链接
  • 如何制作公司免费网站关键词搜索查找工具
  • 建设银行北京市分行网站培训计划方案模板
  • 企业网站一般要素互联网论坛
  • 企业网站后台管理模板什么是关键词举例说明
  • wordpress清理网站缓存青岛专业网站制作
  • 查看网站访问量百度竞价推广方案的制定