gulp之用建立一个代理服务器(解决前端跨域问题)

为什么需要使用代理?
目前,前端发展飞速,前后端分离式开发已经不是新鲜事儿。

1 如果前端只是静态的页面(不需要调用后端的api加载动态数据),那么前端直接在本地开发即可。
即使是前后端分开部署,只需要单独为前端启动一个服务,使用gulp-connect即可。不会?(请戳gulp之用gulp-connect开启一个本地webServer)

2 如果前端需要调用后端提供的接口呢?除非前后端部署在同一个服务器上,否则由于浏览器的限制是没办法跨域请求数据的。真实情况是,我们在本地开发时就需要访问接口,这时后端的程序猿给你的往往是这样一个地址 http://192.168.1.123/controller/action,有人说上传代码到http://192.168.1.123/放在一个目录下不就行了,是啊!可以的。但是好麻烦有没有,调试接口需要传代码上去!!!!

3 如果我的数据是从其他的服务器来的呢?例如我想访问豆瓣的开放接口

  $.post('https://api.douban.com/v2/book/1220562',{},function(data){
    console.log(data);
  })

在这里插入图片描述
豆瓣告诉你,不行!你跨域了!
所以,还是代理来的方便。

代理是个什么鬼?
代理请求通俗点讲,就是把发往 a.com的请求,通过代理服务器发送到b.com。

怎么开启一个代理?
代码如下:

//服务端口
const PORT=8000;
//启动服务的根目录
const server_root='src'
//引用gulp
var gulp = require('gulp');
//引用gulp开启服务的插件
var connect = require('gulp-connect');
//引用插件 gulp代理中间件插件
var proxy = require('http-proxy-middleware');

//开启服务
gulp.task('proxyServer', function() {
    connect.server({
        root: [server_root],
        port: PORT,
        middleware: function(connect, opt) {
            return [
                proxy('/api',  {
                    target: 'https://api.douban.com/v2',//代理的目标地址
                    changeOrigin:true,//
                    pathRewrite:{//路径重写规则 
                        '^/api':''
                    }
                })
            ]
        }

    });
});

说明
’/api’ =>匹配你要代理的请求地址前缀
target=》你要把请求代理到哪
pathRewrite =》是把你再页面中写的请求地址 某部分 重写为后面的字符串
(例子中讲 请求中写的 /api 重写为 空字符串)
也就是发往 /api/book/1220562的请求最终会被发往 https://api.douban.com/v2/book/1220562
页面写请求时的写法

$.post(’/api/book/1220562’,{},function(data){
console.log(data);
})
目录结构
在这里插入图片描述
运行效果
在这里插入图片描述
结语
当然还有其他的方式,比如 node、cros、jsonp、phpheader、nginx设置代理

作者:小枫学幽默
链接:https://www.jianshu.com/p/cc543fd0d7c5
来源:简书

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值