Express JS外卡路由代理

时间:2015-10-02 10:46:13

标签: javascript node.js express proxy

我使用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

。我不确定这里有什么问题。通配符路由看起来很不错。有什么想法吗?

1 个答案:

答案 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];
    }
}));