vue-axios使用,vue axios调用后端接口

  vue-axios使用,vue axios调用后端接口

  本文主要介绍如何在Vue项目中使用axios request。对Vue感兴趣的同学可以参考一下。

  

目录

   1、安装2、无封装存在的问题3、文件的创建4、请求地址配置5、axios配置、请求头的设置和响应代码处理6、实际项目中的使用,与后台的数据交互必不可少。我一般用axios库,所以下面的例子都是基于axios封装的。

  

1、安装

  首先,npm安装axios,很简单:NPM安装Axios

  

2、没有封装存在的问题

  如果项目中没有封装的接口,您可以在文件中的任何地方看到以下接口调用方法:

  这个。$axios.post(/user/add ,{

  参数:{

  名称:this.name,

  年龄:this.age

  }

  })。然后(res={

  console.log(res)

  })。然后(err={

  console.log(res)

  })

  这样写也不是不可以,只是有一些缺陷。接口请求的url分散在各个文件中。如果你需要在接口调用成功或失败时做一些事情,你需要改变每个文件。因此,这些接口请求是统一和集中的。如果有调整的话,直接在集中的文件里找修改就好了,不用每一个文件都检查。

  

3、创建文件

  首先,在项目的src目录下,新建文件夹和文件的目录结构如下:

   src源目录

   API接口文件目录

  log in . api . js登录模块的接口API

   user.api.js用户模块接口api

   服务请求相关文件目录

   Address.js请求地址配置文件

   request.js axios封装、请求拦截、响应代码处理等操作。

  Api文件模块可以根据其实际项目、业务功能、业务逻辑或其他形式进行划分。

  

4、请求地址配置

  一般会有很多项目环境,少数会有开发环境和生产环境。一般情况下,开发环境和生产模式都有不同的基URL,我们需要根据不同的环境来切换不同的基URL。

  Address.js文件:

  //根据process.env.NODE_ENV切换不同的baseURL

  const is pro=process . ENV . node _ ENV=== production

  模块.导出={

  // APIs :vue . config . js中的代理集

  baseURL: isPro?http://192 . 168 . 100 . 120/ceds :/API

  }

  

5、axios 配置,设置请求头及响应码处理

  总体思路是封装一个请求类,其中包含get和post等请求方法。这些请求方法都会调用request方法,Request方法通过传入的不同参数调用原始的axios请求,然后返回一个承诺。

  request.js文件:

  从“axios”导入axios

  从“qs”导入Qs

  从“vue”导入Vue

  从“@ utils/session . utils”//中导入{gettoken},存储获取的令牌文件。

  “发件人地址”。/address //请求地址

  类别请求{

  构造函数(){

  //创建axios实例

  这个。_axios=axios.create({

  baseURL: address.baseURL,

  超时:1000 * 5,//请求超时

  邮件头:{}

  })

  //请求拦截

  这个。_ axios . interceptors . request . use(

  配置={

  const requestHeader={

  x-Requested-With : XMLHttpRequest ,

  Content-Type“:”应用程序/JSON;字符集=UTF-8 ,

  访问控制允许起源: * ,

  Token: getToken() //请求头统一添加token。

  }

  config . headers=object . assign(config . headers,requestHeader)

  返回配置

  },

  错误={

  承诺.拒绝(错误)

  }

  )

  }

  //根据请求方式,判断参数是放在查询中还是放在正文中。

  //最直观的区别,比如GET请求在url中包含参数,而POST是通过request body将参数放在正文中,所以提交时参数的形式是有区别的。

  //以下列了四种我一般常用请求方式的参数形式,大家可以自行调整

  /**

  * 发送得到请求

  * @param {String} url地址

  * @param {Object}查询查询参数

  * @返回数据数据

  */

  get (url,query={}) {

  归还这个. request(get)(url,{

  .询问

  })

  }

  /**

  * 发送邮政请求

  * @param {String} url地址

  * @param {Object} body查询参数

  * @返回数据数据

  */

  帖子(url,body={},标题){

  让数据;

  if(this.isFormData(body)) {

  数据=正文

  } else if(Array.isArray(body)) {

  数据=正文

  }否则{

  数据={.body }

  }

  归还这个. request(post)(url,headers)(url,data);

  }

  put (url,body={}) {

  归还这个. request(put)(url,{

  .身体

  });

  }

  删除(url,body={}) {

  归还这个. request(delete)(url,{

  .身体

  });

  }

  isFormData=v={

  返回对象。原型。托斯特林。call(v)===[对象表单数据]

  }

  /**

  * 设置请求头

  * @param {Object}头请求头

  */

  setHeaders (header) {

  对象.键(头)。forEach(key={

  这个. axios。默认值。标题[关键字]=标题[关键字]

  })

  }

  //处理请求头头球

  handleHeaders () {

  常量头={}

  标头[XMIME-TYPE]=3

  headers[ Content-Type ]= application/JSON;charset=UTF-8

  返回标题

  }

  /**

  * 发送请求

  * @param {String}方法请求方法类型

  * @param标题

  * @returns {function(*=,*=):Promiseunknown}

  * @私人

  */

  _请求(方法,头){

  这个。设置标题(this。句柄头())//设置统一的请求头

  if (headers) {

  this.setHeaders(头)//自定义请求头

  }

  返回(网址,数据,超时)={

  常量配置={

  url,

  方法,

  超时:超时这个. axios.defaults.timeout

  } //构造请求配置

  //判断请求类型区别详解

  const paramType=[get , delete].索引Of(方法)!==-1 ?参数:数据

  配置[参数类型]=数据

  //参数序列化

  配置。paramsserializer=params={

  返回Qs.stringify(params,{ array format: repeat });

  }

  返回新承诺((解决,拒绝)={

  //发送真正的请求,验证权限,检查404等状态

  这个. axios _ axios。请求(配置)。然后(响应={

  如果(这个。handlesuccessstatus(响应。数据。code,response.data)) {

  如果(回应。标题[ content-type ]!== text/plain;charset=urf-8) {

  解决(

  //对响应结果二次包装

  对象。分配(

  {

  成功:数字(响应。数据。代码)===200,

  数据:响应。数据。数据,

  消息:response.data.msg

  },

  响应。数据

  )

  ) //处理返回结果

  }否则{

  解析(响应.数据)

  }

  }

  },响应={

  //处理错误码

  if(response.response) {

  常量状态代码=响应。回应。状态

  this.handleErrorStatus(状态码)

  }否则{

  vue . prototype . $ message . error(response . message)

  }

  拒绝(响应)

  })。catch(错误={

  拒绝(错误)

  })

  })

  }

  }

  }

  //请求成功,返回错误代码

  //具体的状态码和后台开发者统一,然后根据状态码给出相应的提示。

  //以下是我在项目中的操作,可以自行调整扩展。

  handleSuccessStatus(代码,数据){

  让结果=

  让flag=false

  开关(代码){

  案例“20007”:

  Result=未找到二级认证密码!

  标志=真

  破裂

  案例“20008”:

  Result=您的二级认证密码尚未修改,请先修改!

  标志=真

  破裂

  案例“20009”:

  Result=您没有开通二次认证,请联系管理员!

  标志=真

  破裂

  案例“90001”:

  Result=请输入二级认证密码!

  标志=真

  破裂

  案例“90002”:

  Result=没有操作权限!

  标志=真

  破裂

  默认值:

  破裂

  }

  //发出通知

  //$message方法是我按需引入的element-ui中的提示组件。您可以用自己的提示组件替换它。

  如果(结果){

  Vue.prototype.$message.error(结果)

  }

  返回标志

  }

  //根据错误代码得到错误提示

  handleErrorStatus (statusCode) {

  让errorMsg=

  if (statusCode===500) {

  ErrorMsg=数据请求失败,请联系管理员!

  } else if (statusCode===404) {

  ErrorMsg=请求地址错误!

  } else if (statusCode===402) {

  ErrorMsg=您目前没有操作该数据的权限!

  }否则{

  ErrorMsg=请求中有错误!

  }

  //发出通知

  vue . prototype . $ message . error(error msg)

  }

  }

  导出默认新请求()

  

6、使用

  在接口管理文件中,我们可以调用上面封装的请求类,并传入相应的参数。

  User.api.js文件:

  导入http自./服务/请求

  /**

  * @description获取用户列表

  * @param {*} params请求接口的params

  */

  //这里定义的reqUserList方法将调用我们封装的请求中的get方法。get方法的第一个参数是请求地址,第二个参数是查询参数。

  export const req userlist=params=http . get(/user/list ,params)

  在被称为。vue文件,介绍一下这个方法,传入参数就可以了。

  从“@ APIs/user . API”//import API导入{rexuserlist}

  导出默认值{

  名称:用户列表,

  .

  已创建(){

  },

  方法:{

  异步getUsers() {

  //调用api接口,传入参数

  const res=await reqUserList({

  第1页,

  尺寸:10

  })

  Console.log(res) //获取的响应结果

  }

  }

  }

  这样,接口的封装和基本使用就完成了。

  PS:以上文件名、文件夹名、方法名、路径等。都是自己获得的,可以根据自己的代码风格习惯进行调整。

  以上就是如何在Vue项目中使用axios request的细节。更多关于在Vue项目中使用axios的信息,请关注我们的其他相关文章!

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

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