安裝依賴
安裝axios
npm i axios
安裝qs
npm i qs
封裝
【utils/request.js】
import axios from 'axios' // 引入axios
import qs from 'qs' // 引入qs
axios.defaults.baseURL = '/apis' //請求地址的域名(此處使用了代理所以直接填/apis
// 攔截響應response,進行錯誤處理
axios.interceptors.response.use(function (response) {
? // 成功處理
? return response;
}, function (error) {
? // 失敗處理
? error.code = error.response.status
? switch (error.response.status) {
? ? case 400: error.message = '錯誤請求'
? ? ? break;
? ? case 401: error.message = '未授權腌且,請重新登錄'
? ? ? break;
? ? case 403: error.message = '拒絕訪問'
? ? ? break;
? ? case 404: error.message = '請求錯誤,未找到該資源'
? ? ? break;
? ? case 405: error.message = '請求方法未允許'
? ? ? break;
? ? case 408: error.message = '請求超時'
? ? ? break;
? ? case 500: error.message = '服務器端出錯'
? ? ? break;
? ? case 501: error.message = '網絡未實現(xiàn)'
? ? ? break;
? ? case 502: error.message = '網絡錯誤'
? ? ? break;
? ? case 503: error.message = '服務不可用'
? ? ? break;
? ? case 504: error.message = '網絡超時'
? ? ? break;
? ? case 505: error.message = 'http版本不支持該請求'
? ? ? break;
? ? default: error.message = `連接錯誤${error.response.status}`
? }
? return Promise.reject(error);
});
async function request(options) {
// 這里主要是post方法的封裝祠丝,get方法同理
? options.method = 'post'
? if (options.config === 'formData') {
? ? options.headers = {'Content-Type': 'multipart/form-data'}
? } else {
? ? options.data = qs.stringify(options.data)
? }
? return new Promise((resolve,reject) => {
? ? axios(options).then(res => {
? ? //? 這里主要根據后來返回的數(shù)據作判斷愚墓,請根據實際情況
? ? ? if(res.data.status === 0) {
? ? ? ? resolve(res.data)
? ? ? } else {
? ? ? ? this.$message.error(`status: ${res.data.status}, message: ${ res.data.message }`)
? ? ? ? reject(res.data)
? ? ? }
? ? }).catch(error => {
? ? // 顯示攔截器對respone處理后的可讀錯誤
? ? ? this.$message.error(`${error.code} : ${ error.message }`)
? ? })
? })
}
export default { request }
使用
【main.js】
// ...
import Request from '@/utils/require' // 引入封裝的文件
const { request } = Request
Vue.prototype.$request = request // 掛載到全局上
// ...
【src/pages/index.vue】
<template></template>
<script type="text/ecmascript-6">
export default {
// 頁面打開后所作請求
mounted () {
this.$request({
url: '/XX',
data: {}
}).then(res => {
// do something
})
}
}
</script>
<style></styles>