我使用express-http-proxy来代理后端服务器。 我希望将/ proxy viz / proxy / apples / brand或/ proxy / oranges / brand / nnnn等所有请求代理到后端服务。
所以,我在这里设置了一个外卡代理。
'use strict';
var express = require('express');
var proxy = require('express-http-proxy');
var app = express();
// ""
app.use('/proxy*', proxy('https://backend-server.com/' ,{
forwardPath: function(req, res) {
console.log(req.url)
return require('url').parse(req.url).path;
}
}));
var port = 3000;
app.listen(port, function() {
console.log('listening on port ' + port + '.')
});
我期待这一点 https://localhost:3000/proxy/oranges/brand/nnnn代理https://backend-server.com/oranges/brand/nnnn
但我得到了
无法GET / proxy / aa
。我不确定这里有什么问题。通配符路由看起来很不错。有什么想法吗?
答案 0 :(得分:2)
您可以尝试request
模块。这个解决方案非常适合我
var request = require( 'request' );
app.all( '/proxy/*', function( req, res ){
req.pipe( request({
url: config.backendUrl + req.params[0],
qs: req.query,
method: req.method
}, function( error, response, body ){
if ( error )
console.error( 'Wow, there is error!', error );
})).pipe( res );
});
或者,如果您仍想使用express-http-proxy
,则需要编写
app.use( '/proxy/*', proxy('https://backend-server.com/', {
forwardPath: function( req, res ){
return req.params[0];
}
}));