スタックオーバーフローに関する私の最初の質問;)。
私がやろうとしていること: 高速ルート「/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 の問題ですか?
どんなヒントでも大歓迎です