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

头条搜索站长平台成都市建设网站

头条搜索站长平台,成都市建设网站,老房改造 装修公司,百度电话号码目录 前言 配置Axios实例 页面使用 总结 前言 Axios 是一个基于 Promise 的 HTTP 客户端#xff0c;用于浏览器和 Node.js 环境。它提供了一种简单、一致的 API 来处理HTTP请求#xff0c;支持请求和响应的拦截、转换、取消请求等功能。关于它的作用#xff1a; 发起 HTTP …目录 前言 配置Axios实例 页面使用 总结 前言 Axios 是一个基于 Promise 的 HTTP 客户端用于浏览器和 Node.js 环境。它提供了一种简单、一致的 API 来处理HTTP请求支持请求和响应的拦截、转换、取消请求等功能。关于它的作用 发起 HTTP 请求 Axios 提供了丰富的 API使得在浏览器和 Node.js 中发起 HTTP 请求变得非常容易。可以发送 GET、POST、PUT、DELETE 等不同类型的请求。 Promise 风格 Axios 使用 Promise 风格的 API使得在异步请求中更容易处理数据和错误。可以使用 .then() 处理成功的响应使用 .catch() 处理错误。 拦截请求和响应 可以在请求和响应被发送或接收之前进行拦截处理。这使得在请求发送前或响应返回后可以进行一些全局的处理比如添加请求头、处理错误等。 自动转换 JSON 数据 Axios 在接收到响应数据时会自动将 JSON 字符串转换为 JavaScript 对象。这样可以方便地处理和操作服务器返回的 JSON 数据。 取消请求 Axios 允许你创建一个取消请求的令牌以便在需要时取消尚未完成的请求。这在处理组件销毁或用户导航时非常有用可以避免不必要的请求。 全局配置 可以配置全局的默认值例如基础URL、超时时间等以便在整个应用程序中使用相同的设置。 处理请求和响应数据 可以在请求和响应时对数据进行转换和处理。这包括序列化请求数据、解析响应数据等。 上传和下载进度 Axios 提供了上传和下载进度的事件可以监视请求和响应的进度。这对于实时显示进度条等功能非常有用。 总体而言Axios是一个强大而灵活的工具可以简化和优化HTTP请求的处理是前端开发中常用的网络请求库之一并且当在Vue.js 3项目中使用Axios时可以通过全局设置来配置Axios实例以便在整个应用程序中共享相同的请求和响应逻辑比如500或者401时系统的一些操作。 配置Axios实例 前提需要先安装axiosnpm install axios 如下 开始配置先在项目的一个文件夹下某创建一个文件里面进行Axios 实例配置通常在src/utils下一般内容有 import axios from axios;// 创建 Axios 实例 const service axios.create({baseURL: process.env.VUE_APP_BASE_URL, // 使用环境变量配置 baseURLtimeout: 5000, // 设置请求超时时间 });// 请求拦截器 service.interceptors.request.use((config) {// 在请求发送前可以进行一些配置例如添加认证信息等config.headers[X-Auth-Token] your_token; // 示例添加认证信息return config;},(error) {return Promise.reject(error);} );// 响应拦截器 service.interceptors.response.use((response) {// 在响应返回后可以进行一些处理例如判断是否需要更新令牌等// ...return response;},(error) {// 处理响应错误// ...return Promise.reject(error);} );export default service;上面是比较基础的可以在此基础上进行自定义的操作比如我下面这种 axios-req.ts import axios from axios import { ElLoading, ElMessage, ElMessageBox } from element-plus import { useBasicStore } from /store/basic//使用axios.create()创建一个axios请求实例 const service axios.create() let loadingInstance: any null //loading实例 let tempReqUrlSave let authorTipDoor trueconst noAuthDill () {authorTipDoor falseElMessageBox.confirm(请重新登录, {confirmButtonText: 重新登录,closeOnClickModal: false,showCancelButton: false,showClose: false,type: warning}).then(() {useBasicStore().resetStateAndToLogin()authorTipDoor true}) }//请求前拦截 service.interceptors.request.use((req: any) {const { token, axiosPromiseArr }: any useBasicStore()//axiosPromiseArr收集请求地址,用于取消请求req.cancelToken new axios.CancelToken((cancel) {tempReqUrlSave req.urlaxiosPromiseArr.push({url: req.url,cancel})})//设置token到headerif (token) req.headers[X-Auth-Token] token//如果req.method给get 请求参数设置为 ?namexxxif (get.includes(req.method?.toLowerCase()) !req.params) req.params req.data//req loading// ts-ignoreif (req.reqLoading ?? true) {loadingInstance ElLoading.service({lock: true,fullscreen: true,// spinner: CircleCheck,text: 数据载入中...,background: rgba(0, 0, 0, 0.1)})}return req},(err) {//发送请求失败Promise.reject(err)} ) //请求后拦截 service.interceptors.response.use((res: any) {//取消请求useBasicStore().remotePromiseArrByReqUrl(tempReqUrlSave)if (loadingInstance) {loadingInstance loadingInstance.close()}//download fileif (res.data?.type?.includes(sheet)) {return res}const { code, msg } res.dataconst successCode [0,200,20000]const noAuthCode [401,403]if (successCode.includes(code)) {return res.data} else {//authorTipDoor 防止多个请求 多次alterif (authorTipDoor) {if (noAuthCode.includes(code)) {noAuthDill()} else {// ts-ignoreif (!res.config?.isNotTipErrorMsg) {ElMessage.error({message: msg,duration: 2 * 1000})} else {return res}return Promise.reject(msg)}}}},//响应报错(err) {//取消请求useBasicStore().remotePromiseArrByReqUrl(tempReqUrlSave)if (loadingInstance) {loadingInstance loadingInstance.close()}ElMessage.error({message: err,duration: 2 * 1000})return Promise.reject(err)} ) //导出service实例给页面调用 , config-页面的配置 export default function axiosReq(config) {return service({baseURL: import.meta.env.VITE_APP_BASE_URL,timeout: 8000,...config}) }之后我们可以在api文件夹下新建一个user.ts放一些API。就像这样 import axiosReq from /utils/axios-req//登录 export const loginReq (subForm) {return axiosReq({url: /login,method: post,data: subForm}) }//退出登录 export const loginOutReq () {return axiosReq({url: /loginOut,method: post}) }页面使用 这里以登录页为例 登录页面发送请求一般会发送用户账号密码然后获取到一个token所以我一般这样用 import { loginReq } from /api/userconst loginFunc () {loginReq({username: subForm.keyword,password: subForm.password}).then(({ data }) {elMessage(登录成功)basicStore.setToken(data?.token)router.push(/)}).catch((err) {tipMessage.value err?.msg}).finally(() {subLoading.value false}) } 总结 如果想在Vue全局使用的话可以用provide和inject来在整个应用程序中提供和注入Axios实例。 import { createApp } from vue; import App from ./App.vue; import request from /utils/request;const app createApp(App);// 提供Axios实例 app.provide(request, request);app.mount(#app); 页面使用 export default {inject: [request],methods: {fetchData() {this.request.get(/api/data).then(response {// 处理响应数据}).catch(error {// 处理请求错误});},}, }; 但是还是建议每个页面需要哪些API就引入哪些吧。 总结aixos的全局配置会方便API管理并且对于一些关于 token 处理和错误处理的逻辑以及状态码的反馈都是比较方便的根据项目需求来实现。
http://www.pierceye.com/news/168393/

相关文章:

  • 自助建站广告发布企业年检网上申报流程
  • 河北平台网站建设价位外包网站有哪些
  • 做网站客户需要提供的资料梧州网站建设推荐
  • 网站商城建设实训心得网络推广有用吗
  • 考试网站建设房价2024年暴跌
  • 北京网站seo价格建设教育培训的网站
  • 怎样做网站手机和电脑通用木马工业设计公司
  • 榆林市建设局官方网站ppt中网站布局图怎么做
  • 网站视频插件代码如何创建自己的软件
  • 如何免费建造网站电商网站建设哪家好
  • ps做网站首页设计教程郑州seo优化外包热狗网
  • 给网站增加功能怎么做360搜索关键词优化软件
  • 如何做公司网站空间南昌做网站的公司哪个比较好的
  • 美容网站开发网络营销的功能有哪些
  • 推广自己的网站需要怎么做做政协网站的目的是什么
  • 综合性电子商务网站有哪些商城系统软件开发
  • 网站服务器解决方案企业门户网站管理要求
  • 南京网站开发南京乐识专注岳阳网站建设网站
  • 做一直播网站要多少钱淘宝客如何建设推广网站
  • 网站模板内容怎么添加图片不显示菏泽做网站
  • 个人网站备案条件盐城做网站哪家好
  • 小型网站开发教程wordpress自适应小说
  • 来宾网站制作公司网站提交至google
  • 唐山网站建设怎么样专业的个人网站建设哪家
  • 成品网站w灬源码在线看重庆网站制作设计
  • 有没有在家做的兼职网站网站模板如何删除
  • 建站公司用的开源框架家纺网站模板
  • 做情网站甘肃省城乡城乡建设厅网站
  • 开发一个网站做公司内部用一个网站能用asp c
  • 设计师服务平台鱼巴士有哪些网站阜宁网站设计