文档章节

express-http-proxy实现代理转发

千面人
 千面人
发布于 2016/05/09 16:57
字数 334
阅读 2677
收藏 4

我是想搭这么个环境:

前端开发人员通过git clone下代码后,使用

npm install
node web-server.js

几个简单的命令就能工作,不需要其他东西,前后端分离。

后端用java写部署在其他地方,这样要求前端的serlvet请求转发到java服务器上。

直接上配置文件,这是最终的结果,简单漂亮,但为了得到这么漂亮的结果,整整花了我一天的时间。

var express = require("express");
var proxy = require("express-http-proxy");
var app = express();
var port = 8088;

var apiProxy = proxy("localhost:8080",{
	forwardPath:function(req,res){
		return req._parsedUrl.path
	}
})
app.use("/restapi/*",apiProxy);
app.use("/admin/*",apiProxy);
app.use("*.xls",apiProxy);
app.use(express.static('src'));

app.listen(port);
console.log('Now serving the app at http://localhost:'+port);

官网[1]给的例子如下,用的是req.url。

var proxy = require('express-http-proxy');

var app = require('express')();

app.use('/proxy', proxy('www.google.com', {
  forwardPath: function(req, res) {
    return require('url').parse(req.url).path;
  }
}));

然后当我使用app.use('/api/*',proxy)的时候,express把req.url匹配部分全部截去了,因此得到的一直是‘/’。苦恼了我好久。

按照官网的意思,应该用app.use('/',proxy),然后使用filter来进行匹配。

app.use('/proxy', proxy('www.google.com', {
  filter: function(req, res) {
     return req.url.indexOf('/api/') == 0;
  },
  forwardPath: function(req, res) {
    return require('url').parse(req.url).path;
  }
}));

但是当需要匹配多个url后,filter写起来比较繁琐,因此最终使用req._parsedUrl.path。


参考资料:

[1] express-http-proxy官网 https://github.com/villadora/express-http-proxy 








© 著作权归作者所有

千面人
粉丝 18
博文 48
码字总数 24904
作品 0
杭州
高级程序员
私信 提问
使用Nodejs进行反向代理

在实际工程开发中,会有前后端分离的需求。 为了平滑的完成前端请求到后端各个独立服务,需要一个中间件实现请求转发的功能,利用Nginx可以实现,在这里,使用nodejs实现一个反向代理服务器。...

胡壮壮
2017/05/02
0
0
使用反向代理(NodeJS)调试前端AJAX

  最近需要调式大量包含AJAX的前端代码,数据是采用的JSON格式。作为一个懒人,我不想每次都去打开 Visual Studio 来跑服务(VS实在太重量级了)。但是AJAX访问有跨域的问题,不能直接从本...

边城__
2014/04/06
0
0
spring boot——ajax跨域

前言 java语言在多数时,会作为一个后端语言,为前端的php,node.js等提供API接口。前端通过ajax请求去调用java的API服务。今天以node.js为例,介绍两种跨域方式:CrossOrigin和反向代理。 一...

吴金瑞
2018/06/26
0
0
Nginx 利用代理转发请求实例

我们米扑科技的业务遍布全球,有时国外的客户无法访问我们搭建在国内的服务,这就要求我们在国外服务器上搭建一个代理转发服务,用户请求国外服务器的域名,然后代理转发到国内,处理请求后返...

sunboy2050
2018/03/09
143
0
8 行 Node.js 代码实现代理服务器

接触 Node.js 已有多年,一直喜欢它的单线程模型和异步IO特性,以及 JavaScript 语言本身的灵活性。同时,JavaScript 前后端通吃,在全栈开发领域具有独特的优势。今天就来看看作为服务端语言...

李中凯
2016/12/06
493
5

没有更多内容

加载失败,请刷新页面

加载更多

Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
今天
4
0
Xss过滤器(Java)

问题 最近旧的系统,遇到Xss安全问题。这个系统采用用的是spring mvc的maven工程。 解决 maven依赖配置 <properties><easapi.version>2.2.0.0</easapi.version></properties><dependenci......

亚林瓜子
今天
10
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
10
0
Set 和 Map

Set 1:基本概念 类数组对象, 内部元素唯一 let set = new Set([1, 2, 3, 2, 1]); console.log(set); // Set(3){ 1, 2, 3 } [...set]; // [1, 2, 3] 接收数组或迭代器对象 ...

凌兮洛
今天
4
0
PyTorch入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部