访问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服务器
Sourceexpress/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
对象…