使用webpack-dev-server处理跨域请求的方法
作者:政子的博客 时间:2024-04-29 13:44:19
在前端调试的时候,跨域一直都是一个比较麻烦的问题,这个在之前的文章 关于跨域问题的一个解决方法 中其实已经讨论了一些可以使用的方法。
如果要使用 JSONP,第一是需要修改的地方比较多,而且也不太符合前端发展的大趋势,如果使用 CORS 的话并没有 application/json 类型。而且更重要的是这只是在前端调试时候的需求,并不是在上线以后的需求,所以对后端有太多的入侵也不好。
所以就有一个念想突然在大脑中闪过——加入有一个代理不就可以解决这个问题了?但是又想了一下写起来还挺麻烦,于是就被搁置了。
直到前几天 Stone 提到其实 webpack-dev-server 早就想到并且已经帮我们实现了。
于是,我就在一个 Vue 项目中进行测试,发现真的很赞,既可以本地 Server 热加载,还可以直接跨域调用远程 API,完美解决了之前遇到的所有问题。
接下来我简要介绍一下步骤(以一个 Vue 脚手架建立的 webpack 项目为例):
首先检查 build/webpack.dev.conf.js 中是否有
proxy: config.dev.proxyTable,
这个配置项,如果被注释掉,请打开注释,如果没有,请加入到 devServer 对象中
然后在 config/index.js 中的 dev 对象中加入 proxyTable 配置项:
proxyTable: {
'/**': {
target: 'http://api.xxx.com',
changeOrigin: true,
secure: false
}
},
前面的键 /** 意思是代理所有请求,如果代理某些请求,可以将其改为诸如 /api 之类的字符串。
后面的 target 就是要代理到的网站,changeOrigin 的意思就是把 http 请求中的 Origin 字段进行变换,在浏览器接收到后端回复的时候,浏览器会以为这是本地请求,而在后端那边会以为是在站内的调用。
这样,通过这个简单的配置,就完美地解决了跨域的问题。
之后,在直接运行
npm run dev
的时候,就可以将测试前端中的 ajax 请求代理到后端服务器进行测试啦!
最后,贴上官方文档,具体的配置大家可以参考这里:
https://webpack.js.org/configuration/dev-server/#devserver-proxy
来源:https://blog.zhengzi.me/923.html