import axios from 'axios'
import router from '../router/index'
import { Message } from 'element-ui'
import {
showFullScreenLoading,
tryHideFullScreenLoading
} from '@/utils/loading'
import { getToken, getUser } from '@/utils/auth'
import QS from 'qs' // 引入qs模塊,用來序列化post類型的數據,後面會提到
// 創建axios實例
const service = axios.create({
baseURL: process.env.BASE_URL, // api的base_url
timeout: 5000 // 請求超時時間
})
// request攔截器
service.interceptors.request.use(
config => {
config.headers = {
UserId: getUser(),
Authorization: getToken()
}
showFullScreenLoading()
return config
},
error => {
Promise.reject(error)
}
)
// respone攔截器
service.interceptors.response.use(
response => {
//當返回信息爲未登錄或者登錄失效的時候重定向爲登錄頁面
tryHideFullScreenLoading()
return response
},
error => {
tryHideFullScreenLoading()
//當返回信息爲未登錄或者登錄失效的時候重定向爲登錄頁面
if (error.response.status == '401') {
router.push({
path: '/login',
query: { redirect: router.currentRoute.fullPath } //從哪個頁面跳轉
})
}
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
/**
* get方法,對應get請求
* @param {String} url [請求的url地址]
* @param {Object} params [請求時攜帶的參數]
*/
export function get(url, params) {
return new Promise((resolve, reject) => {
service
.get(url, {
params: params
})
.then(res => {
resolve(res.data)
})
.catch(err => {
reject(err.data)
})
})
}
/**
* post方法,對應post請求
* @param {String} url [請求的url地址]
* @param {Object} params [請求時攜帶的參數]
*/
export function post(url, params) {
return new Promise((resolve, reject) => {
service
.post(url, params)
.then(res => {
resolve(res.data)
})
.catch(err => {
reject(err.data)
})
})
}
vue+axios 請求封裝
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.