vue中使用axios固定url請(qǐng)求前綴
使用axios固定url請(qǐng)求前綴
main.js中添加:
使用方法:
定義axios默認(rèn)路徑前綴或動(dòng)態(tài)修改前綴
如:每個(gè)請(qǐng)求url前都要加一個(gè)前綴,但會(huì)根據(jù)開發(fā)環(huán)境不同而變化,那么我們可以寫一個(gè)方法去引用,方便后面維護(hù)
.env.development 開發(fā)文件中寫入要用的服務(wù)編碼
# 微服務(wù)編碼 VUE_APP_SERVICE_PREFIX = '/0201010254'
src/settings.js 新建的settings文件中引入
module.exports = { ? /** ? ?* 主站標(biāo)題 ? ?* @type {string} ? ?*/ ? title: '開發(fā)項(xiàng)目名稱', ? ? /** ? ?* @type {boolean} true | false ? ?* @description Whether fix the header ? ?*/ ? fixedHeader: false, ? ? /** ? ?* @type {string | array} 'production' | ['production', 'development'] ? ?* @description Need show err logs component. ? ?* The default is only used in the production env ? ?* If you want to also use it in dev, you can pass ['production', 'development'] ? ?*/ ? errorLog: 'production', ? /** ? ?* base API ? ?*/ ? baseApi: process.env.VUE_APP_BASE_API, ? /** ? ?* 服務(wù)編碼 ? ?*/ ? servicePrefix: process.env.VUE_APP_SERVICE_PREFIX, ? }
之后請(qǐng)求文件中引入
新建api/app.js 封裝axios請(qǐng)求并引用自定義的服務(wù)編碼文件
// 應(yīng)用層封裝接口 import request from '@/utils/request' import settings from '@/settings' ? // 獲取配置 不需替換 export function getAppConfig(params) { ? return request({ ? ? url: settings.servicePrefix + '/config', ? ? method: 'get', ? ? params ? }) }
其中的request文件是引用自建的請(qǐng)求攔截文件,根據(jù)各自需求
import axios from 'axios' import store from '@/store' import { getToken, removeToken } from '@/utils/auth' ? const BASE_URL = process.env.VUE_APP_BASE_API ? // create an axios instance const service = axios.create({ ? // baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url ? // withCredentials: true, // send cookies when cross-domain requests ? timeout: 60 * 1000 // request timeout }) ? // request interceptors service.interceptors.request.use( ? config => { ? ? // do something before request is sent ? ? // 設(shè)置baseURL ? ? config.baseURL = config.url.startsWith('/mock') ? '' : BASE_URL ? ? const token = getToken() ? ? if (!config.noAuth && token) { ? ? ? // let each request carry token ? ? ? config.headers['Authorization'] = token ? ? } ? ? if (store.state.user.info && store.state.user.info.comId) { ? ? ? config.headers['comId'] = store.state.user.info.comId ? ? ? config.headers['comCode'] = store.state.user.info.comCode ? ? ? config.headers['groupUserCode'] = store.state.user.info.groupUserCode ? ? ? config.headers['userCode'] = store.state.user.info.userCode ? ? } ? ? return config ? }, ? error => { ? ? // do something with request error ? ? 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 ? ?*/ ? ? /** ? ?* Determine the request status by custom code ? ?* Here is just an example ? ?* You can also judge the status by HTTP Status Code ? ?*/ ? response => { ? ? if (response.headers.newjwt) { ? ? ? store.dispatch('user/setToken', response.headers.newjwt) ? ? } ? ? if ((response.data.status && +response.data.status === 16) || response.status === 401) { ? ? ? if (response.status === 401) { ? ? ? ? return Promise.reject('沒有接口權(quán)限,請(qǐng)聯(lián)系管理員') ? ? ? } else { ? ? ? ? setTimeout(() => { ? ? ? ? ? // 清除登錄狀態(tài) ? ? ? ? ? removeToken() ? ? ? ? ? window.location.href = '/' ? ? ? ? }, 1000) ? ? ? ? return Promise.reject('登錄超時(shí),請(qǐng)重新登錄') ? ? ? } ? ? } ? ? if (response.config.handleResponse) { ? ? ? return response ? ? } else { ? ? ? const { head, body } = response.data ? ? ? // 舊數(shù)據(jù)格式分為head和body兩部分,現(xiàn)在使用ApiResponse不會(huì)再出現(xiàn)這兩部分,此處為兼容舊格式的臨時(shí)方案 ? ? ? if (head && body) { ? ? ? ? // 正常返回 ? ? ? ? if (+head.code === 1) { ? ? ? ? ? return body ? ? ? ? } else { ? ? ? ? ? return Promise.reject(head.msg || '未知錯(cuò)誤') ? ? ? ? } ? ? ? } else { ? ? ? ? const { status, statusText, data } = response.data ? ? ? ? if (+status === 0) { ? ? ? ? ? return data ? ? ? ? } else { ? ? ? ? ? if (response.config.handleError) { ? ? ? ? ? ? return Promise.reject(response.data) ? ? ? ? ? } else { ? ? ? ? ? ? return Promise.reject(statusText || '未知錯(cuò)誤') ? ? ? ? ? } ? ? ? ? } ? ? ? } ? ? } ? }, ? error => { ? ? // 非取消請(qǐng)求 ? ? if (!axios.isCancel(error)) { ? ? ? // 401無權(quán)限判斷 ? ? ? if (error.response && error.response.status === 401) { ? ? ? ? return Promise.reject('沒有接口權(quán)限,請(qǐng)聯(lián)系管理員') ? ? ? } else if (error.response && error.response.status === 531) { ? ? ? ? setTimeout(() => { ? ? ? ? ? // 清除登錄狀態(tài) ? ? ? ? ? removeToken() ? ? ? ? ? window.location.href = '/' ? ? ? ? }, 1000) ? ? ? ? return Promise.reject('登錄超時(shí),請(qǐng)重新登錄') ? ? ? } ? ? } ? ? return Promise.reject(error) ? } ) ? export default service
request.js中把token內(nèi)容抽離出來方便管理
src下新建/utils/auth.js
import Cookies from 'js-cookie' ? const TokenKey = 'Admin-Token' ? export function getToken() { ? return Cookies.get(TokenKey) } ? export function setToken(token) { ? if (!token || token === 'null') { ? ? return ? } ? sessionStorage.setItem('jwt', token) ? return Cookies.set(TokenKey, token) } ? export function removeToken() { ? return Cookies.remove(TokenKey) }
最終頁面使用axios
import { getAppConfig } from '@/api/app' //請(qǐng)求 ?const params = {} ? ? ? ? getAppConfig(params).then(res => { ? ? ? ? ? this.loading = false ? ? ? ? ? console.log(res) ? ? ? ? }).catch(e => { ? ? ? ? ? this.loading = false ? ? ? ? ? this.$message.error(e.toString()) ? ? ? ? })
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
在vue中實(shí)現(xiàn)禁止屏幕滾動(dòng),禁止屏幕滑動(dòng)
這篇文章主要介紹了在vue中實(shí)現(xiàn)禁止屏幕滾動(dòng),禁止屏幕滑動(dòng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07Element ui table表格內(nèi)容超出隱藏顯示省略號(hào)問題
這篇文章主要介紹了Element ui table表格內(nèi)容超出隱藏顯示省略號(hào)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,2023-11-11vue使用prop可以渲染但是打印臺(tái)報(bào)錯(cuò)的解決方式
今天小編就為大家分享一篇vue使用prop可以渲染但是打印臺(tái)報(bào)錯(cuò)的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11vue項(xiàng)目實(shí)戰(zhàn)之圓柱狀水波效果實(shí)現(xiàn)
最近工作中實(shí)現(xiàn)的一個(gè)效果不錯(cuò),分享給大家,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目實(shí)戰(zhàn)之圓柱狀水波效果實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12vue3.0 CLI - 2.3 - 組件 home.vue 中學(xué)習(xí)指令和綁定
這篇文章主要介紹了vue3.0 CLI - 2.3 - 組件 home.vue 中學(xué)習(xí)指令和綁定的相關(guān)知識(shí),本文通過實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì) ,需要的朋友可以參考下2018-09-09