express-http-proxy实现代理转发

我是想搭这么个环境:

前端开发人员通过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 








转载于:https://my.oschina.net/amhuman/blog/672317

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值