封裝axios、判斷執行環境、使用qs對data傳參進行格式轉換、請求頭設定、登入過期判斷
阿新 • • 發佈:2020-08-04
import axios from 'axios' import router from "../router"; import 'element-ui/lib/theme-chalk/index.css' import { Message } from "element-ui"; import qs from 'qs' let NODE_ENV_URL = '' export const http = config => { if (process.env.NODE_ENV === 'production') { // 生產模式 NODE_ENV_URL = window.location.protocol + '//' + window.location.host }else if (process.env.NODE_ENV === 'development') { // 開發模式 NODE_ENV_URL = '/api' } else if (process.env.NODE_ENV == 'debug') { // 除錯模式 } return new Promise((resolve, reject) => { const instance = axios.create({ baseURL: NODE_ENV_URL // timeout: 5000}) // 請求攔截 instance.interceptors.request.use(config => { config.method = 'post' config.headers['Content-Type'] = 'application/x-www-form-urlencoded' const token = localStorage.j_token const username = localStorage.j_username// 設定axios為form-data if (config.method === 'post') { // let data = qs.parse(config.data) config.data = qs.stringify({ token, username, ...config.data }) } else if (config.method === 'get') { config.params = { token, username, ...config.params } } return config }) // 攔截響應 instance.interceptors.response.use(data => { if (data.data.code === -9) { // 登入過期 Message({ message: data.data.msg + ',請重新登入!', center: true, type: 'warning' }) localStorage.removeItem('j_username') localStorage.removeItem('j_token') router.push('/login') } return data.data }) instance(config).then(res => { resolve(res) }).catch(rej => { reject(rej) }) }) }
vue.config.js
let path = require('path') let proxy = {} function resolve (dir) { //console.log(__dirname) return path.join(__dirname, dir) } if (process.env.NODE_ENV === 'production') { // 生產模式 proxy = {} } else { // 開發模式 proxy = { '/api': { target: 'url', // secure: false, // 如果是https介面,需要配置這個引數 changeOrigin: true, pathRewrite: { "^/api": '' } } } } module.exports = { chainWebpack: config => { config.resolve.alias .set('@', resolve('src')) // key,value自行定義,比如.set('@@', resolve('src/components')) .set('assets', resolve('src/assets')) .set('components', resolve('src/components')) .set('views', resolve('src/views')) }, devServer: { open: true, host: 'localhost', // 允許外部ip訪問 port: 8080, // 埠 https: false, // 啟用https // 該配置是為了解決前後端聯調時出現的跨域問題,將後端域名下的請求代理到本地,從而避免跨域請求 proxy } }