美文网首页WEB开发
从零开始撸一个webpack脚手架(2)axios封装和基本样式

从零开始撸一个webpack脚手架(2)axios封装和基本样式

作者: 情有千千节 | 来源:发表于2019-05-21 16:27 被阅读0次

axios封装

yarn add axios 
yarn add qs -D

mkdir api 
touch api/api.js
touch api/config.js
touch api/http.js

config.js

let baseUrl

if (process.env.NODE_ENV === 'development') {
  // 开发环境
  baseUrl = '/api'
} else {
  baseUrl = 'http://api.xxxx'
}

export {
  baseUrl
}

http.js

import axios from 'axios'
import qs  from 'qs'
import {baseUrl} from './config'

axios.defaults.baseURL = baseUrl
axios.defaults.timeout = 10000
// 请求头信息是为post请求设置
axios.defaults.headers = {
  'X-Requested-With': 'XMLHttpRequest',
  'Content-type': 'application/x-www-form-urlencoded'
}

// 请求的全局拦截
axios.interceptors.request.use((config) => {
  // stores.commit('IS_LOAGING')  // 可以在这里更改loading
  return config
}, (err) => {
  return Promise.reject(err)
})
// 响应拦截器
axios.interceptors.response.use(response => {
  if (response.status === 200) {
    switch (response.data.code) {
      case 0:
        return Promise.resolve(response.data)
      case -1:
        // 去登陆等
        break;
      default:
        return Promise.reject(response.data)
    }
  } else {
    return Promise.reject(response)
  }
}, error => {
  // 我们可以在这里对异常状态作统一处理
  if (error.response.status) {
    // 处理请求失败的情况
    // 对不同返回码对相应处理
    return Promise.reject(error.response)
  }
})


// post 方法
export function post (url, params) {
  return new Promise((resolve, reject) => {
    axios.post(url, qs.stringify(params)).then((response) => {
      resolve(response)
    }).catch((error) => {
      reject(error)
    })
  }).catch(error => {
    console.log(error)
    // throw new Error(error)
  })
}

// get
export function get (url, params) {
  return new Promise((resolve, reject) => {
    axios.get(url, {params: params}).then((response) => {
      resolve(response)
    }).catch((error) => {
      reject(error)
    })
  }).catch(error => {
    console.log(error)
    // throw new Error(error)
  })
}

api.js

import {get, post} from './http'

export const login = params => post( '/login', params)

相关文章

网友评论

    本文标题:从零开始撸一个webpack脚手架(2)axios封装和基本样式

    本文链接:https://www.haomeiwen.com/subject/isyjzqtx.html