node实现简单的反向代理服务器


Posted in Javascript onJuly 26, 2017

每当提起反向代理器,人们通常一想到的就是 Nginx,但是今天我们暂时忽略大名鼎鼎的 Nginx,采用同样也是使用单线程、事件循环的服务端小弟——Node 来达成

跨域问题是前端开发很常见的问题

解决方案有很多种

  1. jsonp返回
  2. Access-Control-Allow-Origin:'*' (需要注意的是 对于post请求会变成option请求需求后端支持)
  3. 前端添加代理

前端添加代理

以vue-cli为例,前端添加代理

dev: {
  env: require('./dev.env'),
  port: 8888,
  autoOpenBrowser: true,
  assetsSubDirectory: 'static',
  assetsPublicPath: '/',
  proxyTable: {
   '/api':{
    target: 'http://localhost:3000',
    changeOrigin: true,
   }
  }

其中'/api'为接口的前缀,target为后端服务地址

前端请求示例

vm.$http.post('/api/reg', JSON.stringify(info)).then(() => {

 }, () => {

 });

反向代理

反向代理可以理解为指定一个服务地址为内部服务器地址。

为什么需要反向代理

如果只是作为接口请求,其实前端搭建代理服务器就可以了,但是代理服务器并不能满足所有的日常开发。

比如说单点登录的实现,需求服务端做302跳转。但是前端文件没有部署到后端服务器时,set-cookie是不能成功种下cookie登录信息的。

这就需要在后端服务器添加反向代理。

示例如下

const http = require('http');
const httpProxy = require('http-proxy');
const proxy = httpProxy.createProxyServer();
const proxyServer = http.createServer((req, res) => {
 proxy.web(req, res, {
  target: 'http://localhost:8888',
 });
});
proxyServer.listen(8088, () => {
 console.log('proxy server is running ');
});

这样前端开发就可以在8088端口了,当然热加载功能是在前端服务器的8888端口

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js技巧--转义符"\"的妙用
Jan 09 Javascript
使用jquery.validate自定义方法实现"手机号码或者固话至少填写一个"的逻辑验证
Sep 01 Javascript
JQuery的Pager分页器实现代码
May 03 Javascript
jquery显示隐藏元素的实现代码
May 19 Javascript
JavaScript 是什么意思
Sep 22 Javascript
JS判断是否手机或pad访问实现方法
Dec 09 Javascript
zTree异步加载展开第一级节点的实现方法
Sep 05 Javascript
JS中touchstart事件与click事件冲突的解决方法
Mar 12 Javascript
vue 实现的树形菜的实例代码
Mar 19 Javascript
node实现的爬虫功能示例
May 04 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
Sep 28 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
May 25 Javascript
Angular项目中$scope.$apply()方法的使用详解
Jul 26 #Javascript
Vue中计算属性computed的示例解读
Jul 26 #Javascript
让你彻底掌握es6 Promise的八段代码
Jul 26 #Javascript
Bootstrap datepicker日期选择器插件使用详解
Jul 26 #Javascript
js实现图片轮播效果学习笔记
Jul 26 #Javascript
Angular4如何自定义首屏的加载动画详解
Jul 26 #Javascript
vue上传图片组件编写代码
Jul 26 #Javascript
You might like
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
PHP FileSystem 文件系统常用api整理总结
2019/07/12 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
2010/11/16 Javascript
jQuery1.6 使用方法二
2011/11/23 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
全面解析bootstrap格子布局
2016/05/22 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
2019/02/26 Javascript
elementUI select组件value值注意事项详解
2019/05/29 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
Python生成随机MAC地址
2015/03/10 Python
python使用super()出现错误解决办法
2017/08/14 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
python3定位并识别图片验证码实现自动登录功能
2021/01/29 Python
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
学校安全教育制度
2014/01/31 职场文书
教学改革实施方案
2014/03/31 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
Python编程super应用场景及示例解析
2021/10/05 Python