wanlixi / vue-mock

vue+mock
6 stars 0 forks source link

interceptors for mockjs #1

Open wanlixi opened 7 years ago

wanlixi commented 7 years ago
   因为vue 2.x开始已经废除了vue-resource,当然我们常用的接口拦截器也就没有了,所以我们需要替代方案,本文选用的是 axios,axios是npm里面的一个包

下载方法:

npm i --save axios 

使用方法:

ES6: import axios from 'axios'
requirejs: var axios = require('axios')

关于axios的配置 (查看完整配置):

//  基础url,假设请求的不是绝对路径,如:http://xxx.com/api/user/account,则向服务器请求的路径是
//  baseURL+url
#### 全局配置axios
axios.default.baseURL="localhost:8888"
// 请求超时时间
axios.default.timeout = 5000
// 发送自定义Headers头文件,头文件中包含了http请求的各种信息
axios.default.headers[”post“] = “application/x-www-form-urlencoded;charset='UTF-8'"

interceptors 拦截器

如果是POST的请求,配置中可不能用 params 字段了,需要使用 data 字段。 这里有个小地方需要注意,POST的传参需要序列化,不然服务端不会正确的接收哦,会报错。所以这里我们要对request的数据进行一次序列化。这里我用了 qs ,大家需要install一下

import axios from 'axios'
import qs frm 'qs'
// 请求统一处理
axios.interceptors.request.use(config => {
  if (config.method == 'post' ) {
    config.data = qs.stringify(config.data)
  }
  return config
}, err => {
  return Promise.reject(err)
})
// 返回统一处理
axios.interceptor.response.use(res => {
  if (res.code !== 200) {
    return Promise.rejecet(res)
  }
  return res
},err => {
  return Promise.reject(err)
})

注意:

因为这里我使用的 Promise ,所以在安卓4.4.3一下的手机还是不支持Promise的,所以会报错。需要引入 npm install babel-polyfill 和 npm install babel-runtime ,在入口文件上加上即可。