和后端聯(lián)調(diào)時(shí)總是會(huì)面對(duì)惱人的跨域問(wèn)題,最近基于Vue開(kāi)發(fā)項(xiàng)目時(shí)也遇到了這個(gè)問(wèn)題,兩邊各自想了一堆辦法,查了一堆資料,加了一堆參數(shù),最后還得我把自己的localhost映射成上線時(shí)將要使用的域名。
今天翻看代碼時(shí),突然發(fā)現(xiàn)vue-cli的config文件里有一個(gè)參數(shù)叫proxyTable,看這個(gè)名字就感覺(jué)能解決問(wèn)題,于是我就去搜了一下,果然。在vuejs-templates,也就是vue-cli的使用的模板插件里,有關(guān)于API proxy的說(shuō)明,使用的就是這個(gè)參數(shù)。
https://vuejs-templates.github.io/webpack/proxy.html
這個(gè)參數(shù)主要是一個(gè)地址映射表,你可以通過(guò)設(shè)置將復(fù)雜的url簡(jiǎn)化,例如我們要請(qǐng)求的地址是api.xxxxxxxx.com/list/1,可以按照如下設(shè)置:
proxyTable: {
'/list': {
target: 'http://api.xxxxxxxx.com',
pathRewrite: {
'^/list': '/list'
}
}
}
這樣我們?cè)趯?xiě)url的時(shí)候,只用寫(xiě)成/list/1就可以代表api.xxxxxxxx.com/list/1.
那么又是如何解決跨域問(wèn)題的呢?其實(shí)在上面的'list'的參數(shù)里有一個(gè)changeOrigin參數(shù),接收一個(gè)布爾值,如果設(shè)置為true,那么本地會(huì)虛擬一個(gè)服務(wù)端接收你的請(qǐng)求并代你發(fā)送該請(qǐng)求,這樣就不會(huì)有跨域問(wèn)題了,當(dāng)然這只適用于開(kāi)發(fā)環(huán)境。增加的代碼如下所示:
proxyTable: {
'/list': {
target: 'http://api.xxxxxxxx.com',
changeOrigin: true,
pathRewrite: {
'^/list': '/list'
}
}
}
vue-cli的這個(gè)設(shè)置來(lái)自于其使用的插件http-proxy-middleware
github:https://github.com/chimurai/http-proxy-middleware
深入了解的話可以看該插件配置說(shuō)明,似乎還支持websocket,很強(qiáng)大的插件。