先简单介绍下开发环境,后端使用的是JFinal开发的,当然也可以通过后端配置的方式解决跨域问题,个人感觉太麻烦,还是通过配置proxyTable的方式来吧。
网上的文章感觉讲解的不是很详细。
域名a:http://127.0.0.1:8088,这个是后端访问的域名,用来给前端提供接口的。
域名b:http://127.0.0.1:8089,这个是前端,也就是用vue开发的。
比如我的后端有一个这样的api,提供登录的,http://127.0.0.1:8088/login。
那我在配置proxyTable的时候是这样配置的
proxyTable: { '/api/*': { target: 'http://127.0.0.1:8088', changeOrigin: true, pathRewrite: { '^/api': '' } } }
target配置的是后端域名,那么这里可能有人有疑问了,那么api是什么呢?我实在哪里配置的呢?
我在dev.env.js文件中,进行了如下的配置:
module.exports = merge(prodEnv, { NODE_ENV: '"development"', BASE_API: '"/api"', })
大家看到了吧?我人为的在访问路径BASE_API前加了api,这样加上proxyTable上的配置就是,如果我前端项目的链接 http://127.0.0.1:8089/api/login,那么他就会帮我代理到 http://127.0.0.1:8088/login 上,这样就实现了跨域了,至于内部原理我这里没有研究。
至于api前缀是怎么加上去的?是我使用的axios框架的时候,进行了类似以下的全局配置,配置如下:
const service = axios.create({ baseURL: process.env.BASE_API, // api 的 base_url timeout: 15000 // 请求超时时间 })
看到process.env.BASE_API了吧?这样在我通过axios框架进行访问api的时候,就自动给我加上api前缀了。
通过以上的讲解,大家应该明白了proxyTable怎么配置了吧?网上的所有文章都没有拿真实的域名来举例,所以大家可能看的比较模糊,我也是摸索和好长的时间,我想通过我的这篇文章,大家应该很明白了。