2013-12-12 11 views
9

私はミドルウェア(function(req, res, next) {...})の中にいます。node.jsのHTTPサーバーオブジェクトへのアクセス

reqからHTTPサーバーオブジェクトにアクセスする方法はありますか?

更新日

具体的に説明します。私はそれを聞いている場合、サーバーがリッスンするポート、またはunixソケットパスを調べようとしています。 Expressはしかし、TJは、HTTPモジュールのいずれかの混入を落とすに真剣な考慮を与えてきた、#createServer()から返されたオブジェクトに似た何かを公開し

var express = require('express'); 
var http = require('http'); 
var app = express(); 

app.use(app.router); 

app.get('/', function (req, res, next) { 
    console.log(req.socket.server); 
}); 

app.server = http.createServer(app); 
app.server.listen(3000); 

ブラッドが述べたように、:どのようにについてのあなたのメインのアプリケーションファイル内

+0

があります。 'console.log(req)'を実行すると、プロパティーの1つがサーバーを参照します。これは文書化されておらず、将来変更されるかもしれませんが、そこにあります。私はノードを手元に持っていないので、私はプロパティの名前を知らない、申し訳ありません。 – Brad

答えて

11

明示的に将来のリリースで。上記のコードを使用すると、将来的に安全になります。

+0

'req.app'が定義されていないので、これはうまくいきません。http://expressjs.com/api.html#req.params私の答えを見てください – verybadalloc

+0

テストされ、それは動作します。あなたの答えが許されていないメインファイルから経路/ミドルウェアを分離できるという利点もあります。 – srquinn

+0

Bradさんのコメントを見ました。あなたは正しい、それは動作します。しかしそれは文書化されていない。 – verybadalloc

5

何をやろうとしていることはあなたのルーター内のサーバーオブジェクトを公開している場合は、ええ、ミドルウェアは、移動するための方法である:

var express = require('express'); 
var http = require('http'); 
var app = express(); 
var server = http.createServer(app); 

app.use(function(req, res, next){ //This must be set before app.router 
    req.server = server; 
    next(); 
}); 

app.use(app.router); 

server.listen(3000); 

ミドルウェアは、サーバーオブジェクトを公開するために使用されます。その後、あなたはちょうどそうのようなあなたのルーターのいずれかでそれにアクセスすることができます。

app.get('/', function (req, res, next) { 
    console.log(req.server.get('port')); // displays 3000 
}); 
4

を何らかの理由で、私request.app.serverが機能しなかったため、おそらく私が掘るのビットの後、特急4を使用していたので、私がことがわかりましたreq.socket.serverが動作します。

+0

素晴らしい発見、更新ありがとう –

3

機能app.listenは、httpサーバを返します。

エクスプレス/ libに/ application.js:

app.listen = function listen() { 
    var server = http.createServer(this); 
    return server.listen.apply(server, arguments); 
}; 
関連する問題