vue-cli本地環境API代理設置和解決跨域

前言

咱們在使用vue-cli啓動項目的時候npm run dev即可以啓動咱們的項目了,一般咱們的請求地址是以localhost:8080來請求接口數據的,localhost是沒有辦法設置cookie的。css

咱們能夠在vue-cli配置文件裏面設置一個代理,跨域的方法有不少,一般須要後臺來進行配置。咱們能夠直接經過node.js代理服務器來實現跨域請求。vue

vue proxyTable接口跨域請求調試

在vue-cli項目中的config文件夾下的index.js配置文件中,dev長這樣子:node

dev: {
    env: require('./dev.env'),
    port: 8080,
    autoOpenBrowser: true,
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {},   
    cssSourceMap: false
  }

服務器提供的接口若是長這樣https://www.exaple.com/server_new/login,咱們把域名提取出來如https://www.exaple.comios

在config中新建一個文件命名爲proxyConfig.js :ajax

module.exports = {
  proxy: {
        '/apis': {    //將www.exaple.com印射爲/apis
            target: 'https://www.exaple.com',  // 接口域名
            secure: false,  // 若是是https接口,須要配置這個參數
            changeOrigin: true,  //是否跨域
            pathRewrite: {
                '^/apis': ''   //須要rewrite的,
            }              
        }
  }
}

若是自己的接口地址就有 '/api' 這種通用前綴,也就是說https://www.exaple.com/api,就能夠把 pathRewrite 刪掉。vue-cli

config文件夾下的index.js引入proxyConfig.jsnpm

var proxyConfig = require('./proxyConfig')

config文件夾下的index.js中的dev改爲:axios

dev: {
    env: require('./dev.env'),
    port: 8080,
    autoOpenBrowser: true,
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: proxyConfig.proxy,
    cssSourceMap: false
  }

重啓項目npm run devapi

你會發現出現了這個跨域

圖片描述

這個時候咱們已經設置好了本地API代理了

修改本地hosts文件

window文件路徑通常是C:\Window\System32\drivers\etcmac則直接前往文件夾/etc/hosts,打開hosts文件,在這一段下面把localhost設置進去

# localhost name resolution is handled within DNS itself.
# 127.0.0.1       localhost
# ::1             localhost
127.0.0.1                   activate.adobe.com
127.0.0.1                   practivate.adobe.com
127.0.0.1                   lmlicenses.wip4.adobe.com
127.0.0.1                   lm.licenses.adobe.com
127.0.0.1                   na1r.services.adobe.com
127.0.0.1                   hlrcv.stage.adobe.com

localhost                   www.exaple.com

搞定

此時咱們已經徹底解決了跨域問題,以及本地測試後臺沒法向咱們本地環境設置cookie的狀況了。

補充

這個文章發佈好久了,不少人私信我問我開發地址是什麼,上線地址是什麼。

在這裏進行一下補充,教你們一個一勞永逸的方法;

寫一個config.js文件,做爲項目地址的配置。

以下:

//項目域名地址
const url = 'https://exaple.com';


let ROOT;
//因爲封裝的axios請求中,會將ROOT打包進去,爲了方便以後再也不更改,判斷了當前環境,而生成的不一樣的ROOT
if (process.env.NODE_ENV === 'development') {
    //開發環境下的代理地址,解決本地跨域跨域,配置在config目錄下的index.js dev.proxyTable中
    ROOT = "/apis"
} else {
    //生產環境下的地址
    ROOT = url;
}

exports.PROXYROOT = url; //代理指向地址
exports.ROOT = ROOT;

這裏暴露出去了兩個接口,一個做爲代理指向地址,也就是真正的請求地址,一個則爲咱們的ajax請求的地址。

咱們將ROOT引入咱們配置的ajax中,再將proxyConfig.js修改以下:

const config = require("../src/fetch/config");  //路徑大家改下
module.exports = {
  proxy: {
        [config.ROOT]: {    //將www.exaple.com印射爲/apis
            target: config.PROXYROOT,,  // 接口域名
            secure: false,  // 若是是https接口,須要配置這個參數
            changeOrigin: true,  //是否跨域
            pathRewrite: {
                [`^${config.ROOT}`]: ''   //須要rewrite的
            }              
        }
  }
}

以後無論是生產環境,仍是開發環境,都不用再修改咱們的請求地址了。

寫的比較潦草,沒有整理思路,總結一下。

也就是說,以前咱們的方法,在npm run dev的時候,ajax請求接口地址須要帶上/apis,而若是咱們在npm run build的時候,則須要將ajax接口地址改成真正的地址www.exaple.com,這樣極其不方便,每次都要改。那咱們便經過process.env.NODE_ENV來判斷環境,從而導出不同的接口。

好了,若是有小夥伴不太清楚的,私信我我從新整理一下當前教程,若是都能看懂我補充的,就不改啦哈哈😄。

相關文章
相關標籤/搜索