vue封装axios全局使用,vue项目封装api接口

  vue封装axios全局使用,vue项目封装api接口

  在实际项目中,与后台的数据交互是必不可少的。我平时用的是axios库,所以下面这篇文章主要介绍vue打包axios和api的接口管理的相关信息,有需要的朋友可以参考一下。

  :

目录

   1.前言2。axios封装步骤3。api接口统一管理综述

  

一、前言

  其实axios封装和统一管理api接口的主要目的是帮助我们简化代码,方便后期的更新和维护。

  

二、axios封装步骤

  安装:npm安装axios -S

  一般我会在项目的src目录下新建一个网络文件夹作为我们的网络请求模块,然后在里面新建一个http.js和api.js文件和一个reques.js。http.js文件用来封装我们的axios,api.js用来统一管理我们的接口URL,request.js公开了我们放进去的api方法。

  //在http.js中介绍axios

  从“axios”导入axios;//介绍axios

  从导入路由器./router ;

  //vant的toast提示框组件,可以根据自己的ui组件进行更改。

  从“vant”导入{ Toast };

  我们的项目环境可能包括开发环境、测试环境和生产环境。我们通过node的环境变量匹配默认的接口url前缀。Axios.defaults.baseURL可以设置Axios的默认请求地址,不多说了。

  创建配置目录。

  创建env . development . jsenv . production . jsenv . test . js的目录。

  Env.development.js内容:

  模块.导出={

  baseurl: http://www . devele . com:4456 //开发环境使用的基url

  }

  设置请求超时

  通过axios.defaults.timeout设置默认请求超时,比如10s后会通知用户当前请求超时,请刷新等。

  //环境的切换

  const {baseUrl}=require(./config/env。process . ENV . node _ ENV);

  //同时package.json的脚本需要指定测试环境的模式——模式测试。

  脚本:{

  serve: vue-cli-service serve ,

  build : vue-CLI-服务版本,

  测试: vue-CLI-服务构建模式测试,

  lint : vue-CLI-服务lint

  }

  const service=axios.create({

  baseURL: baseUrl,//url=基本api url请求URL

  withCredentials: false,//跨域请求时发送cookies

  超时:1000*12 //请求超时

  })

  发布请求标题的设置

  在请求帖子的时候,我们需要添加一个请求头,所以我们可以在这里做一个默认的设置,就是将帖子的请求头设置为application/x-www-form-urlencoded;字符集=UTF-8

  //设置post请求头

  service . defaults . headers . post[ Content-Type ]= application/x-www-form-urlencoded ;

  请求拦截

  我们可以在发送请求之前拦截它。我们为什么要拦截它?我们用什么来拦截请求?例如,有些请求只有在用户登录后才能被访问,或者我们需要在发出post请求时序列化我们提交的数据。这时候我们就可以在请求发出之前拦截它,做到我们想做的事情。

  //先导入vuex,因为我们要用里面的状态对象。

  //vuex的路径是按照自己的路径写的。

  从“@/store/index”导入商店;

  //请求拦截器

  service . interceptors . request . use(

  配置={

  //加载时不传递默认值

  如果(!config.hideloading) {

  //请求是是否开启加载。

  Toast.loading({

  禁止点击:真

  })

  }

  //每次发送请求前,确定vuex中是否存在token。

  //如果存在的话,令牌统一添加到http请求的头部,让后台根据令牌判断你的登录状态。

  //即使令牌在本地存在,也有可能令牌过期,所以返回状态要在响应拦截器中判断。

  if (store.state.token) {

  config . headers . token=store . state . token;

  //有些接口是config . headers . authorization=token

  }

  返回配置

  },

  错误={

  //对请求错误做些什么

  console.log(错误)//用于调试

  退货承诺.拒绝(错误)

  }

  )

  这里说一下token。通常,登录完成后,用户的令牌通过localStorage或cookie存储在本地。然后,用户每次进入页面(也就是main.js中),都会先从本地存储中读取令牌。如果令牌存在,vuex中的令牌状态将被更新。然后,每次请求接口时,请求的头部都会携带令牌,后台工作人员可以根据携带的令牌判断你的登录是否过期。如果没有,说明你从来没有登录过。这时候可能会有朋友产生疑惑,就是每个请求都携带一个令牌,那么一个页面不需要用户登录就可以访问怎么办?其实你的前端请求可以携带token,但是后台可以选择不接收。

  响应拦截

  //响应拦截器

  服务.拦截器.响应.使用(

  响应={

  //如果返回的状态码是200,说明接口请求成功,可以正常获取数据。

  //否则,抛出错误

  if (response.status===200) {

  return Promise.resolve(响应);

  }否则{

  return Promise.reject(响应);

  }

  },

  //服务器状态代码不是以2开头

  //你可以在这里和你的后台开发者协商统一的错误状态码。

  //然后根据返回的状态码做一些操作,比如登录到期提示,错误提示等等。

  //下面是几个常见的操作,其他需求可以自行扩展。

  错误={

  if (error.response.status) {

  开关(错误.响应.状态){

  //401:未登录

  //如果没有登录,跳转到登录页面,携带当前页面的路径。

  //成功登录后返回当前页面。这一步需要在登录页面上完成。

  案例401:

  router.replace({

  路径:“/login”,

  查询:{

  重定向:router . current out . full path

  }

  });

  打破;

  //403令牌过期

  //当登录过期时提示用户

  //清除本地令牌,清空vuex中的令牌对象

  //跳转到登录页面

  案例403:

  吐司({

  消息:“登录已过期,请再次登录”,

  时长:1000,

  禁止点击:真

  });

  //清除令牌

  store.dispatch(FedLogOut )。然后(()={

  //跳转到登录页面,传递要浏览页面的完整路径。成功登录后,跳转到需要访问的页面。

  router.replace({

  路径:“/login”,

  查询:{

  重定向:router . current out . full path

  }

  }) })

  打破;

  //404请求不存在

  案例404:

  吐司({

  消息:“网络请求不存在”,

  时长:1500,

  禁止点击:真

  });

  打破;

  //对于其他错误,直接抛出错误提示。

  默认值:

  吐司({

  消息:error.response.data.message

  时长:1500,

  禁止点击:真

  });

  }

  return Promise.reject(错误.响应);

  }否则{

  //处理断网的情况

  //eg:更新请求超时或网络断开时的状态的网络状态。

  //网络状态控制app.vue中全局断网提示组件的显示和隐藏

  //刷新断开的组件中的数据将在断开的组件中解释。

  store.commit(changeNetwork ,false);

  }

  });

  //最后导出实例

  导出默认服务;

  

三、api接口统一管理

  创建了一个新的api文件夹,其中包含一个index.js和几个按照模块划分的接口js文件。Index.js是一个api的出口,其他的js用来管理各种模块的接口。

  例如,下面的article.js:

  /**

  *文章模块界面列表

  */

  从“@/network/http”导入请求;//导入在http中创建的axios实例

  从“qs”导入QS;//是否根据需求导入qs模块

  常量文章={

  //新闻列表

  文章列表(){

  退货请求({

  URL:“/artical”,

  方法:“get”,

  参数,

  Hideloading: false //设置不隐藏加载

  })

  },

  //新闻详情,演示

  文章详细信息(id,参数){

  退货请求({

  URL:“/detail”,

  方法:“get”,

  参数:{

  商品编号

  },

  hideloading: true

  })

  },

  //提交帖子

  登录(数据){

  退货请求({

  URL:“/adduser”,

  方法: post ,

  Data:qs.stringify(data),//注意用于post提交的数据参数

  hideloading: true

  })

  }

  //其他接口……………

  }

  导出默认文章;

  index.js的代码

  /**

  * API接口的统一导出

  */

  //文章模块接口

  从“@/api/article”导入文章;

  //其他模块的接口.

  //导出接口

  导出默认值{

  文章,

  //……

  }

  在组件中使用(按需导入)

  从“@/api/index”导入{article}

  已创建(){

  article.articleList()。然后(info={

  如果(信息代码==200)

  this.num=info.data

  }

  })

  }

  api挂载在vue.prototype上,省去了入门的步骤。

  为了方便api的调用,我们需要把它挂载到vue的原型上。在main.js中

  从“vue”导入Vue

  从导入应用程序。/App

  从导入路由器。/router //导入路由文件

  从导入存储。/store ///导入vuex文件

  从导入api。/api //导入api接口

  Vue.prototype. $ api=api//在vue的原型上挂载api复制代码

  然后我们可以在组件中使用它。

  //不需要导入

  方法:{

  加载(id) {

  这个。$api.article.articleDetail(id,{

  空气污染指数:123

  }).然后(res={

  //执行一些操作

  })

  }

  }

  网络断开的处理

  模板

  div id=应用程序

  div v-if=!网络

  H3我没有互联网/h3

  Div @click=onRefresh 刷新/div

  /div

  路由器-视图/

  /div

  /模板

  脚本

  从“vuex”导入{ mapState };

  导出默认值{

  名称:“应用程序”,

  计算值:{

  .mapState([network])

  },

  方法:{

  //通过跳转到一个空页面然后返回来刷新当前页面数据。

  onRefresh () {

  这个。$router.replace(/refresh )

  }

  }

  }

  /脚本

  //refresh.vue

  beforeRouteEnter(收件人,发件人,下一个){

  接下来(虚拟机={

  vm。$router.replace(from.fullPath)

  })

  }

  

总结

  这就是这篇关于vue打包axios和api接口管理的文章。有关vue打包axios和api接口的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: