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 








你可能感兴趣的:(express-http-proxy实现代理转发)