访问node.js express中的HTTP服务器对象

访问node.js express中的HTTP服务器对象,node.js,express,Node.js,Express,我在一个中间件中(函数(req,res,next){…}) 是否有方法从req访问HTTP服务器对象 更新 让我更具体一点。我正在尝试查找服务器侦听的端口,或者unix套接字路径(如果正在侦听该端口)。在主应用程序文件中如何: var express = require('express'); var http = require('http'); var app = express(); app.use(app.router); app.get('/', function (req, re

我在一个中间件中(
函数(req,res,next){…}

是否有方法从
req
访问HTTP服务器对象

更新


让我更具体一点。我正在尝试查找服务器侦听的端口,或者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);

正如Brad提到的,Express确实公开了类似于从
#createServer()
返回的对象的东西,但是,TJ一直在认真考虑在将来的版本中删除Express中包含的任何HTTP模块。使用上面的代码将是未来安全的。

如果您试图做的是暴露路由器中的服务器对象,那么是的,中间件是一种方法:

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
不起作用,可能是因为我在使用express 4,经过一番挖掘,我发现
req.socket.server
起作用。

函数
app.listen
返回您的http服务器

Source
express/lib/application.js

app.listen = function listen() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

有。如果执行
console.log(req)
,其中一个属性将引用服务器。它没有文档记录,将来可能会改变,但它确实存在。我不知道属性的名称,因为我手头没有节点,很抱歉。我很确定这不会起作用,因为未定义
req.app
:。请看一下我的答案,它确实有效。还有一个额外的好处,就是允许您将路由/中间件从主文件中分离出来,这是您的答案所不允许的;你说得对,它会起作用的。但是它没有文档记录。或者
var httpServer=http.createServer();httpServer.on('request',app)
既然您提到了它,我也在文档中发现了它:
app.listen()
方法返回一个
http.Server
对象…