這篇文章將為大家詳細(xì)講解有關(guān)webpack-dev-server如何使用http-proxy解決跨域問題,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)公司一直秉承“誠(chéng)信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個(gè)客戶多一個(gè)朋友!為您提供成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都網(wǎng)頁設(shè)計(jì)、微信小程序定制開發(fā)、成都網(wǎng)站開發(fā)、成都網(wǎng)站制作、成都軟件開發(fā)、成都App定制開發(fā)是成都本地專業(yè)的網(wǎng)站建設(shè)和網(wǎng)站設(shè)計(jì)公司,等你一起來見證!
文檔資料
webpack關(guān)于webpack-dev-server開啟proxy的官方介紹
Vue-cli proxyTable 解決開發(fā)環(huán)境的跨域問題——雖然這篇是寫vue的,不過用在webpack-dev-server上也是一樣的
http-proxy-middleware——webpack-dev-server的實(shí)現(xiàn)方法其實(shí)是對(duì)這個(gè)的封裝
配置http-proxy
在webpack的配置文件(webpack.config.js)中進(jìn)行配置
module.exports = { ...此處省略一萬字 // webpack-dev-server的配置 devServer: { historyApiFallback: true, hot: true, inline: true, progress: true, port: 3000, host: '10.0.0.9', proxy: { '/test/*': { target: 'http://localhost', changeOrigin: true, secure: false } } }, ...此處省略一萬字 };
上述配置中,關(guān)于http-proxy的只是 proxy: {...} 中的值
調(diào)用接口
為了方便起見,下面使用jquery封裝好的ajax函數(shù)進(jìn)行示范
$.ajax({ // url: 'http://10.0.0.9:3000/test/testFetch/Login.php', // 這樣不行 url: '/test/testFetch/Login.php', // 這樣行 type: 'post', data: { app_id: '13751313169', password: '123456', user_name: 'Nicholas' }, success: function(data) { console.log(data); } });
proxy中的部分參數(shù)說明
'/test/*' 以及 target: 'http://localhost'
從名字就能看出,這個(gè)實(shí)際上是將匹配 '/test/*' 這種格式的API的域名重定向?yàn)?'http://localhost'
結(jié)合上面的 “調(diào)用接口” 可以看出, url: '/test/testFetch/Login.php' 這句,實(shí)際上會(huì)自動(dòng)補(bǔ)充前綴,也就是說,url: '/test/testFetch/Login.php' 等價(jià)于 url: 'http://10.0.0.9:3000/test/testFetch/Login.php'
但是,我們使用了http-proxy進(jìn)行重定向,這樣的話,url: '/test/testFetch/Login.php' 等價(jià)于 url: 'http://localhost/test/testFetch/Login.php'
changeOrigin
true/false, Default: false - changes the origin of the host header to the target URL
本地會(huì)虛擬一個(gè)服務(wù)端接收你的請(qǐng)求并代你發(fā)送該請(qǐng)求——這個(gè)是別人的說法
我試了一下,就算這個(gè)參數(shù)設(shè)置成 false 也有部分情況是可以的,具體原因不詳,所以還是將其設(shè)置成 true 吧
secure
true/false, if you want to verify the SSL Certs
pathRewrite
例子: pathRewrite: {'^/api': ''}
Object-keys will be used as RegExp to match paths
我猜,這里是將 '^/api' 使用 '' 代替(只是我猜,沒是成功,估計(jì)是我的正則表達(dá)式寫得不行)
附上使用Fetch API的代碼
上述代碼與 “調(diào)用接口” 中使用 $.ajax() 實(shí)現(xiàn)的效果是一樣的
let testAsync = async function () { var feeling = { app_id: '13751313169', password: '123456', user_name: 'Nicholas' }; var fetchParams = { method: 'post', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, credentials: 'include', // 將憑證也帶上(例如cookies) body: JSON.stringify(feeling), }; let temp = await fetch('/test/testFetch/Login.php', fetchParams).then(response => response.text()); console.log(temp); // 這個(gè)就是一個(gè)json對(duì)象 return temp; }; let data = testAsync(); // async函數(shù)返回值是一個(gè)Promise對(duì)象 console.log(data); // 這個(gè)是一個(gè)Promise對(duì)象
關(guān)于“webpack-dev-server如何使用http-proxy解決跨域問題”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。