vue-cli项目开发/生产环境代理实现跨域请求+webpack配置开发/生产环境的接口地址...

一、开发环境中跨域

  使用 Vue-cli 创建的项目,开发地址是 localhost:8080,需要访问非本机上的接口http://10.1.0.34:8000/queryRole。不同域名之间的访问,需要跨域才能正确请求。跨域的方法很多,通常都需要后台配置,不过 Vue-cli 创建的项目,可以直接利用 Node.js 代理服务器,通过修改vue proxyTable接口实现跨域请求。在vue-cli项目中的config文件夹下的index.js配置文件中,修改前的dev:
dev: {  
    env: require('./dev.env'),  
    port: 8080,  
    autoOpenBrowser: true,  
    assetsSubDirectory: 'static',  
    assetsPublicPath: '/',  
    proxyTable: {}, 
    cssSourceMap: false  
  }

  只要修改里面的proxyTable: {}项

proxyTable: {  
    '/api': {  //代理地址  
        target: 'http://10.1.0.34:8000/',  //需要代理的地址  
        changeOrigin: true,  //是否跨域  
        secure: false,    
        pathRewrite: {  
            '^/api': '/'   //本身的接口地址没有 '/api' 这种通用前缀,所以要rewrite,如果本身有则去掉  
        }
    }
}

  然后重启项目npm run dev

  请求数据时URL前加上“/api”就可以跨域请求了

self.$axios.get('/api/queryRole', {params: params})  
    .then((res) => {  
        console.log(res);  
    }).catch((err) => {  
        console.log(err);  
    })

1、参数proxyTable详解:

  vue-cli的config文件里的参数:proxyTable,这个参数主要是一个地址映射表,你可以通过设置将复杂的url简化,例如我们要请求的地址是api.xxxxxxxx.com/list/1,可以按照如下设置:

proxyTable: {
  '/list': {
    target: 'http://api.xxxxxxxx.com', pathRewrite: { '^/list': '/list' } } }

  这样我们在写url的时候,只用写成/list/1就可以代表api.xxxxxxxx.com/list/1.
  那么又是如何解决跨域问题的呢?其实在上面的'list'的参数里有一个changeOrigin参数,接收一个布尔值,如果设置为true,那么本地会虚拟一个服务端接收你的请求并代你发送该请求,这样就不会有跨域问题了,当然这只适用于开发环境。增加的代码如下所示:

proxyTable: {
  '/list': {
    target: 'http://api.xxxxxxxx.com', changeOrigin: true, pathRewrite: { '^/list': '/list' } } }

  vue-cli的这个设置来自于其使用的插件http-proxy-middleware

  github:https://github.com/chimurai/http-proxy-middleware

  深入了解的话可以看该插件配置说明,似乎还支持websocket,很强大的插件。

2、pathRewrite含义

  用代理,首先你得有一个标识,告诉他你这个连接要用代理,不然的话,可能你的 html,css,js这些静态资源都跑去代理。所以我们只要接口用代理,静态文件用本地。'/iclient': {}, 就是告诉node,我接口只要是'/iclient'开头的才用代理。所以你的接口就要这么写 /iclient/xx/xx。最后代理的路径就是 http://xxx.xx.com/iclient/xx/xx。可是不对啊,我正确的接口路径里面没有/iclient啊,所以就需要 pathRewrite,'^/iclient':'', 把'/iclient'去掉,这样既能有正确标识,又能在请求接口的时候去掉iclient。当然如果本身的接口中就有/iclient,那么就可以把pathRewrite这个参数去掉。

二、在生产环境中跨域

  设置nginx配置文件:

location /api {
    add_header 'Access-Control-Allow-Origin' '*';
    proxy_pass http://fanyi.baidu.com/v2transapi;
}

三、设置不同的接口地址

  平常我们团队开发时都在公司的局域网内,调用接口也是局域网内部的,但是项目上线时,请求接口是线上服务器端的,那么就有接口之间的来回切换问题。

  在使用vue-cli搭建项目以后,做相关配置就可以实现,不用手动更改接口路径,也可以请求不同环境下的接口。

  1、设置不同的接口地址

  先找到以下文件

  /config/dev.env.js

  /config/prod.env.js

  可以看到dev.env.js里面内容如下

  这是生产环境的参数配置,然后我们可以再上面文件加入一行代码,如下:这就是本地测试环境请求后台接口的域名

  然后找到prod.env.js文件,如下:

  我们加入一行代码,如下:这是我们上传服务器以后,请求后台接口的域名

  2、在代码中调用设置好的参数:

  比如我在本项目中重新封装axios(api文件在/src/api/index.js中),将配置好的接口地址作为baseURL拼接到接口路径中,应用参数部分如下:

 

  最后重新启动项目就可以了,当npm run dev的时候就运行在生产环境,当npm run build的时候就是正式的线上环境。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue CLI 3 生成的项目开发环境中可以很容易地处理跨域请求,但在生产环境跨域请求需要一些额外的配置。 在生产环境中,我们可以通过在 Vue CLI 3 项目的根目录下创建一个名为 vue.config.js 的文件来进行设置。在该文件中,我们可以使用 configureWebpack 选项来修改 Webpack配置。 要处理生产环境中的跨域请求,我们可以通过添加一个代理实现。首先,我们需要安装一个用于配置代理的第三方库,例如 http-proxy-middleware。可以通过运行以下命令进行安装: ``` npm install http-proxy-middleware --save-dev ``` 然后,在 vue.config.js 文件中,我们可以使用如下代码来配置代理: ```javascript const proxyMiddleware = require('http-proxy-middleware'); module.exports = { configureWebpack: config => { if (process.env.NODE_ENV === 'production') { config.devServer = { proxy: { '/api': { target: 'http://example.com', // 后端 API 的服务地址 changeOrigin: true, pathRewrite: { '^/api': '', // 如果接口地址中有 /api 前缀,则可以通过 pathRewrite 将其去除 }, }, }, }; } }, }; ``` 在上面的代码中,我们通过将请求路径中的 '/api' 前缀替换为空字符串,实现了将 '/api' 前缀去除。这只是一个示例,你需要根据自己的实际情况进行配置。 这样,当我们在生产环境中向 '/api' 路径发送请求时,请求将被代理到指定的服务地址,从而实现跨域请求处理。 需要注意的是,上述配置中的 target 属性需要替换为你自己后端 API 的实际服务地址。 完成这些设置后,我们需要重新构建生产环境的代码,以使配置生效。可以运行以下命令来构建代码: ``` npm run build ``` 完成构建后,生成的生产环境代码中将包含跨域请求代理设置。 希望以上回答对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值