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 相关文章推荐
基于jQuery的消息提示插件 DivAlert之旅(二)
Apr 01 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
May 11 Javascript
Javascript写入txt和读取txt文件示例
Feb 12 Javascript
LABjs、RequireJS、SeaJS的区别
Mar 04 Javascript
使用jspdf生成pdf报表
Jul 03 Javascript
JQ技术实现注册页面带有校验密码强度
Jul 27 Javascript
喜大普奔!jQuery发布 3.0 最终版
Jun 12 Javascript
使用OPENLAYERS3实现点选的方法
Sep 24 Javascript
微信小程序之发送短信倒计时功能
Aug 30 Javascript
Webpack实战加载SVG的方法
Dec 26 Javascript
如何通过shell脚本自动生成vue文件详解
Sep 10 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
Dec 06 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
php smarty模版引擎中的缓存应用
2009/12/11 PHP
php将session放入memcached的设置方法
2014/02/14 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
JavaScript中的私有成员
2006/09/18 Javascript
JS option location 页面跳转实现代码
2008/12/27 Javascript
Javascript 类型转换方法
2010/10/24 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
Python3生成手写体数字方法
2018/01/30 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
python爬虫中多线程的使用详解
2019/09/23 Python
keras打印loss对权重的导数方式
2020/06/10 Python
python性能测试工具locust的使用
2020/12/28 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
初中数学教学反思
2014/01/16 职场文书
会计学生自我鉴定
2014/02/06 职场文书
户籍证明模板
2014/09/28 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
电影红河谷观后感
2015/06/11 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书
字节飞书面试promise.all实现示例
2022/06/16 Javascript