5

アプリケーションの特定のパスからルート パスへの Express アプリを使用してプロキシをセットアップしようとしています。

http://my-domain.com/some/route --> http://another-domain:8000/

http-proxy docs ごとに複数のことを試しましたが、パス/ルーティングで壁にぶつかり続けています。プロキシしようとしているアプリの背後で認証を利用できるように、ログインしたエクスプレスアプリ内でこれを実行しようとしています。パス '/some/route' が定義されていないことを示すプロキシ アプリでエラーが発生し続けます...など。

var httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({});

proxy.proxyRequest(req, res, {
    host:'localhost',
    port:8000
});

私も試しました:

var url = 'http://localhost:8000/';
var httpProxy = require('http-proxy'),
    proxy = httpProxy.createProxyServer({});

proxy.web(req,res, { target: url }, function(e) {
    console.log('proxy.web callback');
    console.log(e);
});

関数は呼び出しますが、急な404エラーが発生します...

可能であれば、いくつかの変数も渡したいと思います。たとえば、次のようになります。

http://my-domain.com/some/route?var1=something&var2=something --> http://another-domain:8000/?var1=something&var2=something

しかし、それが可能かどうかはわかりませんでした.proxyRequestに送信されていたので、リクエストに設定しようとしましたが、2番目のアプリケーションでそれらを見つけることができませんでした.

4

2 に答える 2

8

いいえ、これだけではできませんnode-http-proxy

しかし、それは可能http-proxy-middlewareです(おそらくすでに使用しているでしょう):

github の @chimurai のコメントから:

pathRewriteオプションでパスを書き換えることができます。

var options = {
  target: 'http://test.com',
  changeOrigin: true,
  pathRewrite: {'^/api' : ''}      // <-- this will remove the /api prefix
};

server.middleware = proxyMiddleware('/api', options);

また、 を使用しているためにここに来た場合は、バージョンから開始して、webpack-dev-server内部でも を使用していることに注意してください( PR を参照)。http-proxy-middleware2.0.0-beta

補足: node-proxy プラグインもあるhttp-proxy-rulesので、ミドルウェアが不要な場合はこれを使用できます。

于 2016-01-22T08:57:12.623 に答える
2

さて、別の問題に遭遇しましたが、最初にこの問題を解決する必要がありました。私はこのコードを思いつきました。これは私にとってはうまくいきました;)

これを「/some/route」に使用するだけです

.... // your stuff

httpProxy.on('error', function (err, req, res) {
    res.writeHead(500, {
        'Content-Type': 'text/plain'
    });
    res.end('some error');
});

app.all( '/some/route/*' , function( req , res ) {

        var url = req.url;
        url = url.slice(11); // to remove "/some/route"

        req.url = url;

        return httpProxy.web(req, res , { target: "http://another-domain:8000" } );

} );

お役に立てれば。

于 2014-10-14T10:54:11.523 に答える