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

pun*_*und 16 node.js express

我在一个中间件(function(req, res, next) {...})里面.

有没有办法从req?访问HTTP服务器对象?

UPDATE

让我更具体一点.我试图找出服务器侦听的端口,或者unix套接字路径,如果它正在侦听它.

srq*_*inn 17

你的主app文件怎么样:

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);
Run Code Online (Sandbox Code Playgroud)

正如Brad所提到的,Express确实暴露了类似于返回对象的东西#createServer(),但是,TJ一直在认真考虑在将来的版本中放弃在express中包含任何HTTP模块.使用上面的代码将来是安全的.


ver*_*loc 7

如果您要做的是在路由器中公开服务器对象,那么,中间件是要走的路:

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);
Run Code Online (Sandbox Code Playgroud)

中间件用于公开服务器对象.然后,您可以在任何路由器中访问它,如下所示:

app.get('/', function (req, res, next) {
  console.log(req.server.get('port')); // displays 3000
});
Run Code Online (Sandbox Code Playgroud)


pra*_*mil 5

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

资源 express/lib/application.js

app.listen = function listen() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};
Run Code Online (Sandbox Code Playgroud)