2012-01-16 9 views
1

NodeJSゲームエンジンを構築しています。ユーザーがエンジンのインスタンスを作成するとき、既存のhttpサーバーに渡す必要があります。次に、エンジンは、クライアントサイドビューを更新するためのソケットサーバを接続する。特殊なファイルパスを持つノードモジュールのコンポーネントをクライアント側に提供

私がしたいのは、クライアントサイドをブリッジする特別なURLで1つのJavaScriptファイルを提供し、エンジンが独自のソケットをセットアップし、Webページにビューポートと制御バインディングAPIを提供できるようにすることです。

URLに基​​づいて単一のjavascriptを提供できる既存のhttpサーバーに要求ハンドラを追加する方法はありますか?

私はこの

function bindCoreFileServe(httpServer) { 

    //create a server 

    httpServer.on('request', function(req, res) { 

     //check the url 
     if(req.url === '/SliverJet.js') { 

      //send the datafunction (req, res) { 
      res.writeHead(200, {'Content-Type': 'text/plain'}); 
      res.end('Hello World\n'); 

     } 
    }); 
} 

を試みた。しかし、既存のサーバにも独自のヘッダを送信しようとするためには、ノードがクラッシュします。

ありがとうございました。

答えて

1

私は経由してこれを考え出しましたsocket.ioのソース。基本的には、すべてのイベントリスナーをhttpServerから切り離して配列に格納し、自分自身のリスナーをバインドします。 URLが私に属していない場合、私はすべての分離されたイベントリスナーをコールメソッドで実行し、httpServerをスコープとして渡します。

function bindFileCoreServer (httpServer) { 
    httpServer.addListener('request', function (req, res) { 
    if (req.url === '/SliverJet.js') { 
     res.writeHead(200, {'Content-Type': 'text/javascript'}); 
     res.end('//Hello world!'); 
    } 
    }); 
}; 

これは、要求のリスナーを格納し、それらを交換し、その後、必要に応じてループ内でそれらを呼び出すよりもはるかに簡単です:私のために働いた

0

私はあなたがそれを達成することはできません(httpServer上で2つのリクエストハンドラをつける)と思いますが、あなたはこれに対して別のアプローチをとることをお勧めします。例えば

、データベースにすべてのそれらのURLを保存し、それらがそうのように、ワイルドカードを使用するためのチェック(これはExpressのですが、あなたのアイデアを得る):

app.get('/:db_url', function(req, res) { 
    get_url_from_database(req.params.db_url, function (url, error) { 
    if (error) { throw error; } 
    else { 
     // do things 
    } 
    }); 
}); 
0

ソリューションは、このようになります。

+0

もし私が間違っていたら私を訂正してください。私は、以前のイベントリスナーを取り除いて、URLがそれらに属していなければイベントを処理しないようにしなければならないと考えました。あなたのメソッドは、イベントリスナーが最後に起動されるように見えます。 –

関連する問題