封装axios的js方法
import axios from 'axios'
import {
MessageBox,
Message
} from 'element-ui'
import store from '@/store'
import {
getToken
} from '@/utils/auth'
// create an axios instance
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API,
timeout: 20000 // request timeout
})
// request interceptor
service.interceptors.request.use(
config => {
// do something before request is sent
// 统一设置请求消息头token
const mytoken = {
client: 'backstage',
token: getToken()
}
if (store.getters.token) {
config.headers['x-access-token'] = JSON.stringify(mytoken)
}
return config
},
error => {
// do something with request error
console.log(error) // for debug
return Promise.reject(error)
}
)
// response interceptor
service.interceptors.response.use(
/**
* If you want to get http information such as headers or status
* Please return response => response
*/
response => {
const res = response.data
if (res.code !== 0) {
Message({
message: res.message || 'Error',
type: 'error',
duration: 5 * 1000
})
if (res.code === 2001) {
// to re-login
MessageBox.confirm('登录超时,请重新登录', '提示', {
confirmButtonText: '重新登录',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
store.dispatch('user/resetToken').then(() => {
location.reload()
})
})
}
return Promise.reject(new Error(res.message || 'Error'))
} else {
return res
}
},
// 相应失败的处理
error => {
console.log('err' + error) // for debug
Message({
message: error.message,
type: 'error',
duration: 4 * 1000
})
return Promise.reject(error)
}
)
export default service
使用axios方法封装api
import request from '@/utils/request' // 引入封装的请求方法
export function allShopList(data) {
return request({
url: '/allStore/shopList',
method: 'post',
data,
baseURL: process.env.VUE_APP_PEISONG_API // url = base url + request url 重写基础地址
})
}
配置环境变变量
新建 .env.development .env.production .env.staging 文件编写环境变量如
NODE_ENV = production
# just a flag
ENV = 'staging'
# base url
VUE_APP_URL = 'xxxxxx'
# base api
VUE_APP_BASE_API = 'xxxxx'
# peisong api
VUE_APP_PEISONG_API = 'xxxxx'
每个文件写对应地址就可以了 修改package.json文件配置,就可以用对应指令区分打包测试或者成产环境
'scripts': {
"dev": "vue-cli-service serve",
"build:prod": "vue-cli-service build",
"build:stage": "vue-cli-service build --mode staging",
}
Api的使用
在对应vue文件引入需要的api方法,传入需要的参数用promise处理就好了