node.js反向代理的实现

更新日期: 2018-11-25阅读量: 3950标签: 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.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

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

Node编码规范

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

使用pkg打包Node.js应用的方法步骤

Node.js应用不需要经过编译过程,可以直接把源代码拷贝到部署机上执行,确实比C++、Java这类编译型应用部署方便。然而,Node.js应用执行需要有运行环境,意味着你需要先在部署机器上安装Node.js

深入解析Node.js Stream ondata触发时机与顺序

今天小编就为大家分享一篇关于Node.js Stream ondata触发时机与顺序的探索,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。

NodeJS有难度的面试题,你能答对几个?

加载模块时,为什么每个模块都有__dirname,__filename属性呢,new Module的时候我们看到1.1部分没有这两个属性的,那么这两个属性是从哪里来的

node怎么更新升级?

如果你的node安装的比较早,现在最新的版本比自己安装的高,则可以通过升级的方式更新到指定的版本和最新的版本。下面本篇文章就来给大家介绍windows下和linux更新升级node版本的方法。

用了这么久的 require,你真的懂它的原理吗?

我们常说node并不是一门新的编程语言,他只是javascript的运行时,运行时你可以简单地理解为运行javascript的环境。在大多数情况下我们会在浏览器中去运行javascript,有了node的出现

query和params在前后端中的区别

最近在学node,试着做一个前后端都有的项目,然后就遇到了query和parmas这俩兄弟,你说他们俩长得也不像吧,可这用法实在是太类似了,专门写篇文章来区分这哥俩,分别会从vue路由和Node接收两个角度讲

如何创建高性能、可扩展的Node.js应用?

在这篇文章中,我们将介绍关于开发 Node.js web 应用程序的一些最佳实践,重点关注效率和性能,以便用更少的资源获得最佳结果。提高 web 应用程序吞吐量的一种方法是对其进行扩展,多次实例化其以平衡在多个实例之间的传入连接

node怎么升级?

Node.js的开发非常活跃,他的最新稳定版本也频繁变化,所以需要经常的升级Node。用n模板升级nodejs,n模块是专门用来管理nodejs的版本;用NVM来升级nodejs,注:nvm在使用的时候有坑,建议使用n来升级nodejs和控制版本。

深入解析Node.js Event Loop各阶段

今天小编就为大家分享一篇关于Node.js Event Loop各阶段讲解,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。timer阶段处理setTimeout于setInterval回调,开始处理的时机与poll阶段有关联。

点击更多...

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