我正在编写一个使用express处理HTTP请求的服务器端node.js应用程序,并添加了websockets(socket.io)支持。但是,我无权访问启动HTTP服务器的代码。我正在编写一个快速路由器,并具有处理各种URL的功能。我的代码如下所示:
var express = require('express');
var router = express.Router();
router.post( myURL, myFunction );
设置路由器时,我也想使用socket.io来监听websocket连接。我无法将
express
或express()
传递给require('socket.io')( xxx )
,我需要传递http.Server对象。但是由于我没有启动服务器,我该如何获得它? 最佳答案
据我所知,Express app
对象不知道服务器对象。在Express中,事情的方式是将app
对象提供给服务器对象,而不是相反。实际上,单个app
对象甚至可以与多个服务器一起使用(有时对http和https服务器也可以使用)。
您可以使用req.connection.server
从请求处理程序中访问服务器对象,但这是来自服务器作为请求上下文的一部分,而app
对象本身并不知道。
因此,如果要在初始化时访问服务器对象以供socket.io使用,则必须将服务器对象捕获到创建它的变量中。
您在问题中显示的代码不会创建或启动服务器。启动服务器以与Express一起使用的通常两种方法是:
var express = require('express');
var app = express();
// Express creates a server for you and starts it
var server = app.listen(80);
或者,您自己创建服务器,并将express作为处理程序传递给它:
var express = require('express');
var app = express();
// you explicitly create the http server
var server = require('http').createServer(app);
server.listen(80);
在每种情况下,最终都将服务器对象包含在变量中,然后可以将其与socket.io一起使用。
在传递给请求处理程序的
req
或res
对象处理请求的过程中,您可以从Express路由处理程序内部访问服务器。res.connection.server
req.connection.server
关于javascript - 如何从Express应用程序获取http.server?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38062689/