1. 程式人生 > 實用技巧 >封裝axios、判斷執行環境、使用qs對data傳參進行格式轉換、請求頭設定、登入過期判斷

封裝axios、判斷執行環境、使用qs對data傳參進行格式轉換、請求頭設定、登入過期判斷

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
    }
}