前言

我们在使用vue-cli启动项目的时候npm run dev便可以启动我们的项目了,通常我们的请求地址是以localhost:8080来请求接口数据的,localhost是没有办法设置cookie的。

我们可以在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
}

服务器提供的接口如果长这样https://www.exaple.com/server_new/login,我们把域名提取出来如https://www.exaple.com

在config中新建一个文件命名为proxyConfig.js :

module.exports = {
proxy: {
'/apis': { //将www.exaple.com印射为/apis
target: 'https://www.exaple.com', // 接口域名
secure: false, // 如果是https接口,需要配置这个参数
changeOrigin: true, //是否跨域
pathRewrite: {
'^/apis': '' //需要rewrite的,
}
}
}
}

如果本身的接口地址就有 '/api' 这种通用前缀,也就是说https://www.exaple.com/api,就可以把 pathRewrite 删掉。

config文件夹下的index.js引入proxyConfig.js

var proxyConfig = require('./proxyConfig')

config文件夹下的index.js中的dev改成:

dev: {
env: require('./dev.env'),
port: 8080,
autoOpenBrowser: true,
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: proxyConfig.proxy,
cssSourceMap: false
}

重启项目npm run dev

你会发现出现了这个

这个时候我们已经设置好了本地API代理了

修改本地hosts文件

window文件路径一般是C:\Window\System32\drivers\etcmac则直接前往文件夹/etc/hosts,打开hosts文件,在这一段下面把localhost设置进去

# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 activate.adobe.com
127.0.0.1 practivate.adobe.com
127.0.0.1 lmlicenses.wip4.adobe.com
127.0.0.1 lm.licenses.adobe.com
127.0.0.1 na1r.services.adobe.com
127.0.0.1 hlrcv.stage.adobe.com localhost www.exaple.com

搞定

此时我们已经完全解决了跨域问题,以及本地测试后台无法向我们本地环境设置cookie的情况了。

补充

这个文章发布很久了,很多人私信我问我开发地址是什么,上线地址是什么。

在这里进行一下补充,教大家一个一劳永逸的方法;

写一个config.js文件,作为项目地址的配置。

如下:

//项目域名地址
const url = 'https://exaple.com'; let ROOT;
//由于封装的axios请求中,会将ROOT打包进去,为了方便之后不再更改,判断了当前环境,而生成的不同的ROOT
if (process.env.NODE_ENV === 'development') {
//开发环境下的代理地址,解决本地跨域跨域,配置在config目录下的index.js dev.proxyTable中
ROOT = "/apis"
} else {
//生产环境下的地址
ROOT = url;
} exports.PROXYROOT = url; //代理指向地址
exports.ROOT = ROOT;

这里暴露出去了两个接口,一个作为代理指向地址,也就是真正的请求地址,一个则为我们的ajax请求的地址。

我们将ROOT引入我们配置的ajax中,再将proxyConfig.js修改如下:

const config = require("../src/fetch/config");  //路径你们改下
module.exports = {
proxy: {
[config.ROOT]: { //将www.exaple.com印射为/apis
target: config.PROXYROOT,, // 接口域名
secure: false, // 如果是https接口,需要配置这个参数
changeOrigin: true, //是否跨域
pathRewrite: {
[`^${config.ROOT}`]: '' //需要rewrite的
}
}
}
}

之后不管是生产环境,还是开发环境,都不用再修改我们的请求地址了。

写的比较潦草,没有整理思路,总结一下。

也就是说,之前我们的方法,在npm run dev的时候,ajax请求接口地址需要带上/apis,而如果我们在npm run build的时候,则需要将ajax接口地址改为真正的地址www.exaple.com,这样极其不方便,每次都要改。那我们便通过process.env.NODE_ENV来判断环境,从而导出不一样的接口。

好了,如果有小伙伴不太清楚的,私信我我重新整理一下当前教程,如果都能看懂我补充的,就不改啦哈哈

vue-cli本地环境API代理设置和解决跨域的更多相关文章

  1. vue 本地环境API代理设置和解决跨域

    写一个config.js文件,作为项目地址的配置. //项目域名地址 const url = 'https://exaple.com'; let ROOT; //由于封装的axios请求中,会将ROO ...

  2. vue-cli 本地环境 API 代理设置和解决跨域

    前言 我们在使用 vue-cli 启动项目的时候npm run dev便可以启动我们的项目了,通常我们的请求地址是以 localhost: 来请求接口数据的,localhost 是没有办法设置 coo ...

  3. Web API中使用CORS解决跨域

    Web API中使用Cros解决跨域 如果两个页面的协议,端口和域名都相同,则两个页面具有相同的源,注:IE不考虑端口,同源策略不会阻止浏览器发送请求,但是它会阻止应用程序看到响应.如下图所示 COR ...

  4. NodeJS设置Header解决跨域问题

    转载: NodeJS设置Header解决跨域问题 app.all('*', function (req, res, next) { res.header('Access-Control-Allow-O ...

  5. nginx 前后端分离 代理转发,解决跨域问题

    场景 适用于公司有前端,项目采用前后端分离.类似于我们 后端 springboot 提供接口,前端专门写html调用相应的接口,解决跨域问题 配置说明 worker_processes 1; even ...

  6. express 设置header解决跨域问题

    //设置跨域访问 app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", ...

  7. vue+java后台通信报403,cors解决跨域问题(该贴说的不是很清楚,不过大概如此,可再去网上查相关内容)

    前端是vue2.0,网络请求用的是axios,后端是springboot2.0 用axios向后端发送post请求,结果得到一个403无权限的错误,莫名其妙啊,我明明发送的是post请,但在chrom ...

  8. 设置chrome解决跨域问题

    开发中遇到跨域问题, 解决方法一 以关闭安全验证模式启动chrome,就不会报跨域了  开发阶段,用这个方式是可以的,不然他需要后台配置成 * , 发布会有风险  设置方法:  --disable-w ...

  9. vue 前端反向代理后台,解决跨域问题

    // 和 src 同层的 config 文件夹下的 index.js dev 里面的 // Paths     assetsSubDirectory: 'static',     assetsPubl ...

随机推荐

  1. 第二章 Vue快速入门-- 16 vue中通过属性绑定为元素绑定style行内样式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  2. iptables设置

    一,安装iptables yum -y install iptables-services iptables-devel 二,查看规则 iptables -nL --line-number 三,清空规 ...

  3. /usr/lib/python2.7/site-packages/requests/__init__.py:91: RequestsDependency

    原因:python库中urllib3 (1.22) or chardet (2.2.1) 的版本不兼容 解决如下: [ [root@aaaaaaaaaaaaaaaaaaaa~]# pip uninst ...

  4. linux ngxtop安装安装及使用

    写在前面: ngxtop是Nginx日志实时分析利器 1.下载 下载地址:https://github.com/lebinh/ngxtop  下载zip文件到本地 登录linux服务器,定位到安装目录 ...

  5. JAVA》eclipse——(三)jsp学习

    导出一个war包

  6. js 循环post

    var url_s=["h/a","h/b","h/c"]; function post_test(url,callback) { //请求 ...

  7. Beyong Compare 2.4.10刷新剩余日期bat批处理文件

    @echo off % start )(window.close)&&exit REG DELETE "HKCU\Software\Scooter Software\Beyo ...

  8. 在linux 下安装git

    ① 安装 Git Linux 做为服务器端系统,Windows 作为客户端系统,分别安装 Git 服务器端: #yum install -y git 安装完后,查看 Git 版本 [root@loca ...

  9. Travis CI Could not find or load main class org.gradle.wrapper.GradleWrapperMain 错误

    问题 在 Travis CI 编译的时候出现 Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain ...

  10. Mongo rs

    概念 rs中存储了每一次对mongo数据库的CUD操作,对rs的大小进行resize. 主要有两种方法: 在未开启过rs的情况下,修改配置文件 已使用rs一段时间后,发现rs太大,重新进行大小配置 启 ...