Vue项目中使用Axios封装http请求

时间: 2019-10-23阅读: 2331标签: axios

使用axios可以统一做请求响应拦截,例如请求响应时我们拦截响应信息,判断状态码,从而弹出报错信息。请求超时的时候断开请求,还可以很方便地使用then或者catch来处理请求。


安装

npm install axios --save

建立http.js文件

在/src/utils/目录下建立一个htttp.js

1.首先导入axios和router。

import axios from 'axios';
import router from '../router';

2.接着设置axios请求参数。

axios.defaults.timeout = 5000; //请求超时5秒
axios.defaults.baseURL ='';  //请求base url
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; //设置post请求是的header信息

如果你要用到session验证码功能,让请求携带cookie,可以加上以下一行:

axios.defaults.withCredentials = true

3.然后,我们要给请求加个拦截器,就是在请求即将发送之前,我们需要给请求添加信息,比如下面的代码中,我们给请求添加header信息,header中添加token,这样每次请求都会在header中携带token信息。这在我们的接口开发中经常用到。

//http request 拦截器
axios.interceptors.request.use(
  config => {
    let token = sessionStorage.getItem('token')
    if (token) {  // 判断是否存在token,如果存在的话,则每个http header都加上token
      config.headers = {
        'X-token': token
      }
    }
    
    return config
  }, 
  err => {
    return Promise.reject(err)
  }
)

4.接下来,我们看下请求返回时的拦截器。

比如我们发送请求时,如果后端返回错误代码,则前端应该提示信息。比如后台返回没有权限,不允许访问,跳转到登录页,这些都可在拦截器上完成。

axios.interceptors.response.use(
  response => {
    if (response.data.code === 4003) {
      Toast({
        mes: '您没有权限操作!',
        timeout: 1500,
        callback: () => {
          router.go(-1);
        }
      });
      
      return false;
    }
    if (response.data.code === -1) {
      localStorage.removeItem('token')
      router.push({
        path:"/login",
        querry:{redirect: router.currentRoute.fullPath}//从哪个页面跳转
      })
    }
    return response
  }, 
  err => {
    if (err.code === 'ECONNABORTED' && err.message.indexOf('timeout') !== -1) {
      Toast({
          mes: '网络异常,连接超时...',
          timeout: 1500
      });
    }
    return Promise.reject(err)
  }
)

5.现在我们来封装一个get方法:

/**
 * 封装get方法
 * @param url
 * @param data
 * @returns {Promise}
 */

export function get(url, params={}, headers={}){
  return new Promise((resolve, reject) => {
    axios.get(url,{
      params: params,
      headers: headers
    })
    .then(response => {
      resolve(response.data);
    })
    .catch(err => {
      reject(err)
    })
  })
}

6.再封装一个post方法:

/**
 * 封装post请求
 * @param url
 * @param data
 * @returns {Promise}
 */

 export function post(url, data = {}){
   return new Promise((resolve, reject) => {
      axios.post(url, data)
      .then(response => {
        resolve(response.data);
      }, err => {
        reject(err)
      })
   })
 }

使用

在main.js中引入:

import {post,get} from './utils/http'
//定义全局变量
vue.prototype.$post = post;
Vue.prototype.$get = get;

在组件中使用:

this.$post(url, params)
  .then((res) => {
    if (res.result === 'success') {
      this.$message({
        message: '登录成功!',
        type: 'success'
      })
      this.$router.push('/main')
    } else {
      this.$message.error(res.msg)
      this.refreshCode();
    }
  });

这段代码是用户登录发送post请求的代码示例,其他get请求也是一样的处理方式。


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/6085

网络模块axios的简单应用

例子中使用到的url仅作为示例,不一定有效,想要复现代码需要使用能够提供数据的有效服务器接口url,axios:ajax i/o system;是用于在Vue.js中发送网络请求的第三方框架;可通过许多方式发送网络请求比如:

自己动手实现一个axios

作为一名前端er,对于数据请求的第三方工具axios,一定不会陌生,如果还是有没有用过,或者不了解的小伙伴,这里给你们准备了贴心的中文文档 ,聪明的你们一看就会~

封装axios

创建一个server目录,在该目录下创建index.js文件,配置axios:使用create方法创建axios实例,封装请求方法:创建一个api.js文件

vue axios不缓存get请求(防止返回304不更新数据)

最近做项目遇到一款浏览器,由于缓存了get请求,导致不管如何刷新,数据都不更新的问题。以下分享一下解决办法:解决思路就是给每一条get请求增加一个timestamp的参数,value为时间戳

如何实现 axios 的自定义适配器 adapter

我们想基于 axios 扩展一些自己的数据请求方式(例如 mock 数据,某些 APP 内专属的数据请求方式等),并能够使用上 axios 提供的便捷功能,该怎么自定义一个适配器 adapter

vue封装axios和利用拦截器监控返回的token的变化和报错信息

步骤一:安装axios进入vue-cli;步骤二:新建一个httpConfig文件下,创建两个js文件,一个作为axios拦截器用,一个封装接口;步骤三:在serviceAPI.config.js中封装所有的API接口

vue axios 拦截器

项目中需要验证登录用户身份是否过期,是否有权限进行操作,所以需要根据后台返回不同的状态码进行判断。axios的拦截器分为请求拦截器和响应拦截器两种。我一般把拦截器写在main.js里。

axios表单格式请求后端报错Bad Request

开始没有使用Qs库,能获取到列表数据,但是添加项目等需要传请求参数的情况下,使用表单的传参方式就不能成功请求,就报错。报错如下:

怎样在vue项目中使用axios处理接口请求

vue项目中使用axios处理后端接口请求,在main.js中全局引入axios,因为axios不是为了vue写的插件(插件内要处理)不支持vue.use()加载方式,为方便使用,可以将其挂载在vue原型上;全局使用this.$axios

vue项目封装axios请求拦截器

拦截每一次你的请求和响应,然后进行对应的处理。比如一些网站过了一定的时间不进行操作,就会退出登录让你重新登陆页面,当然这不用拦截器你或许也可以完成这功能,但是会很麻烦,而且代码会产生大量重复

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!