1

スタックオーバーフローに関する私の最初の質問;)。


私がやろうとしていること: 高速ルート「/pad/*」を使用して、etherpads (etherpad lite) を表示し、ユーザーに表示されるパッドを操作したいと考えています。したがって、「/pad/p/something」を取得すると、「something」が処理され、実際の ID (「XYZ」など) に応じて変更されます。したがって、ユーザーは正しいパッドを編集できます。ただし、etherpad には多くの静的なものと websocket が必要なため、必要に応じてプロキシし、ID を操作したいと考えています。


最小限の作業例: もちろん、ID 変更の実際のロジックははるかに複雑ですが、最小限の作業例では、すべてのパッド ID が "a" にマップされるロジックを使用します。

私はこれを思いついた:

/* packages */
var express = require( "express" );
var http = require( "http" );
var httpProxy = require('http-proxy');

/* app */
var app = express();
app.use(app.router);

/* some express logic */
app.get( '/' , function( req , res ) {
    res.end( "hello world" );
} );

/* the proxy */
var padProxy = httpProxy.createProxyServer( {} );

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

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

    var url = req.url;
    url = url.slice(4)

    /*WHY DOES THIS NOT WORK????*/
    if( url.slice(0,3) === '/p/' ) {
        url = "/p/a"
    };

    req.url = url;

    return padProxy.web(req, res , { target: "http://<etherpad server ip>:<etherpad server port>" } );

} )

/* run */
http.createServer(app).listen( 3000 , function(){
    console.log( "started" );
});

問題: URL が変更され、プロキシが実際に機能する ... のようなもの。すべての URL は、パッド、静的なもの、および Websocket で機能するすべての URL の先頭にある「/pad」を削除するようにマップされます。しかし、パッド ID のマッピングは機能しません。「localhost:3000/pad/p/a」を見ると、「a」パッドが見えます。「localhost:3000/pad/p/b」を見ると、「b」パッドが表示されますが、これは私が意図したものではありません:/。

私は何を間違っていますか?これは node-http-proxy、express、または etterpad-lite の問題ですか?

どんなヒントでも大歓迎です

4

1 に答える 1