失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > axios 请求拦截封装使用

axios 请求拦截封装使用

时间:2019-05-04 00:38:09

相关推荐

axios 请求拦截封装使用

1. 引入axios

import axios from 'axios'

2. 引入接口 api

import API from './api'

接口 api 格式如下

1 {2 "userInfo": {3 "query": "xxx/xxx/userInfo/query", 4 "update": "xxx/xxx/userInfo/update", 5 },6"xxx": {7 "xxx": "xxx/xxx/xxx/xxx"8 }9 }

3. 配置本地测试和线上的请求域名

a. node 环境可以用process.env.NODE_ENV来判断是不是在本地环境,

b. 不是node 环境就用你的本地域名判断吧, 127.0.0.1 localhost 什么的

c. 有配置代理跨域的 devOrigin 配上你的代理名

1 const devOrigin = '' // 本地开发接口地址3 // 正式环境动态获取域名4 const Host = process.env.NODE_ENV === 'development' ? devOrigin : window.location.origin

4. 配置全局参数

1 axios.defaults.headers['Content-Type'] = 'application/json' // 全局请求头2 axios.defaults.headers['publicParams'] = '******' // 如果要设置公参也可以放在请求头里3 axios.defaults.baseURL = Host // 配置请求域名第3步拿到的域名4 axios.defaults.timeout = 10000 // 配置超时时间

5. 设置全局的请求拦截和响应拦截

1 // 请求拦截 2 axios.interceptors.request.use(function (config) { 3 // 请求已经到了服务器那边 4 // config 是请求时携带的一些信息可以打印下看看具体的 5 }, function (error) { 6 // 请求出现了错误,一般可能时客户端网络出现问题 7 }) 8 9 // 响应拦截10 axios.interceptors.response.use(function (res) { 11 // 接口返回200这里需要 return 返回的信息,不然请求的时候拿不到服务器返回的信息12 }, function (error) {13 // 响应非200,或者超过了设定的请求时间而超时了14 })

6. 向外部暴露请求方法

a. post请求如下

1 export const httpPost = (url, params, config = {}) => { 2 const [key1, key2] = url.split('/') 3 let urls 4 if (API[key1]) { 5urls = API[key1][key2] 6 } else { 7urls = url 8 } 9 let data = {10 xxx: 'xxx' // 这里可以添加公共参数,比如appid什么的11 ...params12 } 13 }14 return axios({15url: urls,16method: 'post',17data: data,18...config 19 })20 }

b. get 请求如下, 这里也可以像post 请求一样使用将请求参数放在第二个参数里,参数格式用json 格式,就是这里配置请求url 的时候需要把json 拼接成 search 格式的参数

1 export const httpGet = (url, params = {}, config = {}) => { 2 const [key1, key2] = url.split('/') 3 let urls 4 if (API[key1]) { 5urls = API[key1][key2] 6 } else { 7urls = urlKeys 8 } 9 axios({10url: urls,11params: {12 ...params13} 14method: 'get',15...config16 })17 }

7. 页面发起请求

a. 支持 es6

1 async function getUserInfo () { // 可以使用 try catch 拿到请求出错信息2 let res = await httpGet('userInfo/query', {userId: 123}) // get 请求3 let res2 = await httpPost('userInfo/update', { // post 请求4 name: 'haha'5 }) 6 }

b. promise 写法

1 httpPost('userInfo/update', {2 name: 'haha'3 }).then(result => {4 // result 响应拦截返回的信息5 }).catch(error => {6 // 请求出错7 })

以上

如果觉得《axios 请求拦截封装使用》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。