node.js反向代理的实现

时间: 2018-11-25阅读: 3812标签: node

在实际工程开发中,会有前后端分离的需求。使用node.js反向代理的目的:实现前后端分离,前端减少路径请求的所需的路由文件

 

方式一:http-proxy-middleware中间件

第一步:安装http代理中间件


npm install http-proxy-middleware --save

第二步: express文件中(app.js)配置反向代理


// 1. 引入http-proxy-middleware模块
var proxy = require(‘http-proxy-middleware‘);

// 2. 代理中间件配置项
var options = {
    target: ‘http://192.168.182.66:8080/‘, // target host
    changeOrigin: true, // needed for virtual hosted sites
};
// 3. 将请求路径按“代理中间件配置项”进行请求
app.use(proxy(‘/login/*‘,options));

解析:本地的请求地址是localhost:3000/login,当经过代理配置后,会将localhost:3000替换为http://192.168.182.66:8080/;所以实际的请求路径是http://192.168.182.66:8080/login;


方式二:Http Proxy 模块

(1)安装 Http Proxy

npm install http-proxy

(2)创建模拟后端服务的server

service.js(监听 8000)

var http = require("http");
http.createServer(function(request, response) {
    console.log('request received');
    response.writeHead(200, {
        "Content-Type": "text/plain"
    });
    response.write("I'm service A");
    response.end();
}).listen(8000);
console.log('service started');

(3)创建反向代理server

proxy.js(监听 8080)

var http = require('http')
var httpProxy = require('http-proxy')

var proxy = httpProxy.createProxyServer();

proxy.on('error', function(err, req, res) {
    res.end();
});

var proxy_server = http.createServer(function(req, res) {
    proxy.web(req, res, {
        target: 'http://localhost:8000'
    });
});

proxy_server.listen(8080, function() {
    console.log('proxy server is running ');
});

(4)测试

先启动 service.js

node service.js

再启动 proxy.js

node proxy.js

浏览器中访问 proxy 

http://localhost:8080/

可以看到 service 输出的信息 I'm service A,实现了反向代理的基本功能。


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/1416

Node.js v13.2.0 开始支持ES modules了

Node.js 前不久发布了v13.2.0,宣布开始支持ES modules。在此之前,想要在node中使用ES modules,需要添加--experimental-module。v13.2.0版本后,可以直接使用ES modules了。

node.js+express 做301重定向实验

目前百度无法承诺 301 跳转的生效时间,因为站长感受到的生效时间会受多因素影响,比如 Baiduspider 再次抓取这个页面发现其设置了 301 的时间、网页的重要程度以及自身质量等。

NodeJS有什么优势

Node.js是一个javascript运行环境。它让javascript可以开发后端程序,实现几乎其他后端语言实现的所有功能,可以与PHP、Java、Python、.NET、Ruby等后端语言平起平坐。

Node编码规范

采用2个空格缩进,而不是tab缩进。空格在编辑器中与字符是等宽的,而tab可能因编辑器的设置不同。2个空格会让代码看起来紧凑、明快。永远用var声明变量,不加var时会将其变为全局变量,这样可能会意外污染上下文,或是被意外污染。

用 EventEmitter 处理 Node.js 中的事件

在本教程中我们学习 Node.js 的原生 EvenEmitter 类。学完后你将了解事件、怎样使用 EvenEmitter 以及如何在程序中利用事件。另外还会学习 EventEmitter 类从其他本地模块扩展的内容,并通过一些例子了解背后的原理

Node.js是什么?

如果你有一定的前端基础,比如 HTML、CSS、JavaScript、jQuery;那么,Node.js 能让你以最低的成本快速过渡成为一个全栈工程师(我称这个全栈为伪全栈,我认为的全栈也要精通数据库,不喜勿喷),从而触及后端和移动端的开发。

如何正确使用Node.js事件

事件驱动的编程变得流行之前,在程序内部进行通信的标准方法非常简单:如果一个组件想要向另外一个发送消息,只是显式地调用了那个组件上的方法。但是在 react 中用的却是事件驱动而不是调用。

Node.js Stream 的两种模式

Node.js 的可读流对象提供了两种模式:流动模式(flowing)、暂停模式(paused),如果你使用管道 pipe() 或异步迭代可能不会关注到这个问题,在它们的内部实现中已经处理好了,如果你是基于事件的 API 来处理流,可能会有这些疑问。

node.js+react.js+xterm.js构建webssh

先讲一下简单的原理:前端和后端的通信,使用的是socket.js,后端连接服务器,使用的是ssh2.js,页面显示出控制台这个操作页面,使用的是xterm.js。整个工作流程就是:前端在xterm.js里面输入文字,通过socket和后端通信

Node中流的概念

流数据:就是字节数据,在应用程序中各种对象之间交换与传输数据的时候,总是先将该对象中所包含的数据转化为字节数据也就是流数据。再通过流的传输,到达目的对象后,再将流数据转化为该对象中可以使用的数据。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!