devserverproxy是vue.js中用于代理服務(wù)器的一個組件,可以讓前端向后端發(fā)起請求時,由開發(fā)服務(wù)器中轉(zhuǎn)到真實的后端服務(wù)器,避免了跨域問題的出現(xiàn)。在vue.js中,開發(fā)服務(wù)器指的是webpack-dev-server,因此,vue.js中的devserverproxy是基于webpack-dev-server來實現(xiàn)的。
webpack-dev-server是webpack中的一個開發(fā)服務(wù)器,可以在開發(fā)階段快速搭建一個本地服務(wù)器用來測試和開發(fā)代碼。在啟動webpack-dev-server時,通過設(shè)置devServer選項,可以對服務(wù)器進行一些配置,其中就包括devserverproxy。當(dāng)前端向開發(fā)服務(wù)器發(fā)出請求時,開發(fā)服務(wù)器會將請求中的路徑與devserverproxy中配置的路徑進行比對,如果匹配上了,就會將請求轉(zhuǎn)發(fā)到proxy選項中指定的地址上,這樣前端就可以和后端進行通信了。
config/index.js: module.exports = { dev: { // Paths assetsSubDirectory: 'static', assetsPublicPath: '/', proxyTable: { '/api': { target: 'http://localhost:3000', changeOrigin: true } }, // Other options omitted for brevity }, }
在vue.js中,可以在config/index.js文件中進行devserverproxy的配置,proxyTable選項指定了需要代理的路徑和代理的目標地址。例如上述的配置中,所有以/api開頭的請求都會被代理到http://localhost:3000上。
methods: { fetchData() { axios.get('/api/users') .then(response =>{ this.users = response.data }) } },
配置好devserverproxy之后,前端就可以通過axios等HTTP庫發(fā)起請求了。例如上述代碼中,前端向后端請求了所有用戶的信息,但是實際上是先發(fā)給了開發(fā)服務(wù)器,開發(fā)服務(wù)器會通過devserverproxy將請求轉(zhuǎn)發(fā)到配置的目標地址。
需要注意的是,如果代理的目標地址是一個HTTPS服務(wù)器,那么需要在proxy選項中設(shè)置secure:false來允許使用不安全的HTTPS鏈接。例如:
config/index.js: module.exports = { dev: { proxyTable: { '/api': { target: 'https://localhost:3000', changeOrigin: true, secure: false } } } }
這樣我們就可以成功地通過devserverproxy將請求轉(zhuǎn)發(fā)到后端服務(wù)器了。