Home Web Front-end JS Tutorial vue+axios request interception

vue+axios request interception

Jun 12, 2018 pm 03:11 PM
vue

This time I will bring you vue axios request interception. What are the precautions for using vue axios request interception? The following is a practical case, let's take a look.

axios Introduction

axios is a Promise-based HTTP client for browsers and nodejs. It has the following characteristics:

Create XMLHttpRequest from the browser
Make http requests from node.js
Support Promise API
Intercept requests and responses
Convert request and response data
Cancel requests
Automatically Convert JSON data
Client supports preventing CSRF/XSRF

The following code introduces vue axios request interception. The specific code is as follows:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

import axios from 'axios';//引入axios依赖

import { Message } from 'element-ui';

import Cookies from 'js-cookie'//引入cookie操作依赖

import router from '@/router/index'//引入路由对象

axios.defaults.timeout = 5000;

axios.defaults.baseURL ='';

//http request 封装请求头拦截器

axios.interceptors.request.use(

  config => {

    var token = ''

    if(typeof Cookies.get('user') === 'undefined'){

      //此时为空

    }else {

      token = JSON.parse(Cookies.get('user')).token

    }//注意使用的时候需要引入cookie方法,推荐js-cookie

    config.data = JSON.stringify(config.data);

    config.headers = {

      'Content-Type':'application/json'

    }

    if(token != ''){

     config.headers.token = token;

    }

    return config;

  },

  error => {

    return Promise.reject(err);

  }

);

//http response 封装后台返回拦截器

axios.interceptors.response.use(

  response => {

    //当返回信息为未登录或者登录失效的时候重定向为登录页面

    if(response.data.code == 'W_100004' || response.data.message == '用户未登录或登录超时,请登录!'){

      router.push({

        path:"/",

        querry:{redirect:router.currentRoute.fullPath}//从哪个页面跳转

      })

    }

    return response;

  },

  error => {

    return Promise.reject(error)

  }

)

/**

 * 封装get方法

 * @param url

 * @param data

 * @returns {Promise}

 */

export function fetch(url,params={}){

  return new Promise((resolve,reject) => {

    axios.get(url,{

      params:params

    })

      .then(response => {

        resolve(response.data);

      })

      .catch(err => {

        reject(err)

      })

  })

}

/**

 * 封装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)

      })

  })

}

/**

 * 封装导出Excal文件请求

 * @param url

 * @param data

 * @returns {Promise}

 */

export function exportExcel(url,data = {}){

  return new Promise((resolve,reject) => {

    axios({

      method: 'post',

      url: url, // 请求地址

      data: data, // 参数

      responseType: 'blob' // 表明返回服务器返回的数据类型

    })

    .then(response => {

      resolve(response.data);

      let blob = new Blob([response.data], {type: "application/vnd.ms-excel"});

      let fileName = "订单列表_"+Date.parse(new Date())+".xls" ;

      if (window.navigator.msSaveOrOpenBlob) {

        navigator.msSaveBlob(blob, fileName);

      else {

        var link = document.createElement('a');

        link.href = window.URL.createObjectURL(blob);

        link.download = fileName;

        link.click();

        window.URL.revokeObjectURL(link.href);

      }

    },err => {

      reject(err)

    })

  })

}

/**

 * 封装patch请求

 * @param url

 * @param data

 * @returns {Promise}

 */

export function patch(url,data = {}){

  return new Promise((resolve,reject) => {

    axios.patch(url,data)

      .then(response => {

        resolve(response.data);

      },err => {

        reject(err)

      })

  })

}

/**

 * 封装put请求

 * @param url

 * @param data

 * @returns {Promise}

 */

export function put(url,data = {}){

  return new Promise((resolve,reject) => {

    axios.put(url,data)

      .then(response => {

        resolve(response.data);

      },err => {

        reject(err)

      })

  })

}

Copy after login

I believe you have mastered it after reading the case in this article For more exciting methods, please pay attention to other related articles on the php Chinese website!

Recommended reading:

Detailed explanation of JS same-origin and cross-domain access implementation

react to make page code splitting, press Need to load

The above is the detailed content of vue+axios request interception. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to use bootstrap in vue How to use bootstrap in vue Apr 07, 2025 pm 11:33 PM

Using Bootstrap in Vue.js is divided into five steps: Install Bootstrap. Import Bootstrap in main.js. Use the Bootstrap component directly in the template. Optional: Custom style. Optional: Use plug-ins.

How to add functions to buttons for vue How to add functions to buttons for vue Apr 08, 2025 am 08:51 AM

You can add a function to the Vue button by binding the button in the HTML template to a method. Define the method and write function logic in the Vue instance.

How to use watch in vue How to use watch in vue Apr 07, 2025 pm 11:36 PM

The watch option in Vue.js allows developers to listen for changes in specific data. When the data changes, watch triggers a callback function to perform update views or other tasks. Its configuration options include immediate, which specifies whether to execute a callback immediately, and deep, which specifies whether to recursively listen to changes to objects or arrays.

What does vue multi-page development mean? What does vue multi-page development mean? Apr 07, 2025 pm 11:57 PM

Vue multi-page development is a way to build applications using the Vue.js framework, where the application is divided into separate pages: Code Maintenance: Splitting the application into multiple pages can make the code easier to manage and maintain. Modularity: Each page can be used as a separate module for easy reuse and replacement. Simple routing: Navigation between pages can be managed through simple routing configuration. SEO Optimization: Each page has its own URL, which helps SEO.

How to return to previous page by vue How to return to previous page by vue Apr 07, 2025 pm 11:30 PM

Vue.js has four methods to return to the previous page: $router.go(-1)$router.back() uses <router-link to="/" component window.history.back(), and the method selection depends on the scene.

How to reference js file with vue.js How to reference js file with vue.js Apr 07, 2025 pm 11:27 PM

There are three ways to refer to JS files in Vue.js: directly specify the path using the <script> tag;; dynamic import using the mounted() lifecycle hook; and importing through the Vuex state management library.

How to use vue traversal How to use vue traversal Apr 07, 2025 pm 11:48 PM

There are three common methods for Vue.js to traverse arrays and objects: the v-for directive is used to traverse each element and render templates; the v-bind directive can be used with v-for to dynamically set attribute values ​​for each element; and the .map method can convert array elements into new arrays.

How to jump to the div of vue How to jump to the div of vue Apr 08, 2025 am 09:18 AM

There are two ways to jump div elements in Vue: use Vue Router and add router-link component. Add the @click event listener and call this.$router.push() method to jump.

See all articles