我在一箇中間件(function(req, res, next) {...}
)中。訪問node.js中的HTTP服務器對象express
有沒有辦法從req
訪問HTTP服務器對象?
UPDATE
讓我更具體。我試圖找出服務器偵聽的端口,或者unix套接字路徑,如果它在監聽。
我在一箇中間件(function(req, res, next) {...}
)中。訪問node.js中的HTTP服務器對象express
有沒有辦法從req
訪問HTTP服務器對象?
UPDATE
讓我更具體。我試圖找出服務器偵聽的端口,或者unix套接字路徑,如果它在監聽。
如何在你的主應用程序文件:
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);
布拉德提到,快遞確實暴露出類似的東西將對象從#createServer()
返回,但是,TJ已經認真考慮丟棄HTTP模塊的任何夾雜物在未來的版本中表達。使用上面的代碼將是安全的。
我非常確定這不起作用,因爲'req.app'沒有被定義:http://expressjs.com/api.html#req.params。請看看我的回答 – verybadalloc
經過測試,它確實有效。還有一個額外的好處,允許你從你的答案不允許的主文件中分離出你的路由/中間件。 – srquinn
剛剛看到布拉德的評論;你是對的,它會工作。但它沒有證件。 – verybadalloc
如果你正在嘗試做的是暴露你的路由器裏面的服務器對象,然後是啊,中間件是要走的路:
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
});
出於某種原因,我request.app.server
沒有工作,可能是因爲我用快遞4,挖位後,我發現, req.socket.server
工程。
奇妙的發現,感謝您的更新 –
函數app.listen返回您的http服務器。
快遞/ lib中/ application.js中:
app.listen = function listen() {
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
有。如果您執行'console.log(req)',則其中一個屬性引用服務器。它沒有記錄,將來可能會改變,但它在那裏。我不知道房產的名稱,因爲我沒有Node,很抱歉。 – Brad