javascript - 如何从 express 应用程序中获取 http.server?

标签 javascript node.js express socket.io

我正在编写一个服务器端 node.js 应用程序,它使用 express 来处理 HTTP 请求,并且我正在添加 websockets (socket.io) 支持。但是我无权访问启动 HTTP 服务器的代码。我正在编写一个快速路由器和函数来处理各种 URL。我的代码如下:

var express = require('express');
var router = express.Router();
router.post( myURL, myFunction );

在设置路由器时,我也想使用 socket.io 来监听 websocket 连接。我无法将 expressexpress() 传递到 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 一起使用。


在处理来自传递给请求处理程序的 reqres 对象的请求时,您可以从 Express 路由处理程序内部访问服务器.

res.connection.server
req.connection.server

关于javascript - 如何从 express 应用程序中获取 http.server?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38062689/

相关文章:

javascript - Ionic 2 - 传单 map onclick 事件

javascript - 文件名 JS 中的时间戳

java - 如何从 Angular 2 应用程序执行驻留在服务器上的 Java 代码?

node.js - 性能不佳(Node.js 从 MongoDB 提供数据)

node.js - Express Validator 的值无效

node.js - 通过 LinkedIn 登录使用 Passport 对用户进行身份验证

javascript - ExpressJS 设置/获取/使用 cookie

javascript - 如何抓取无限滚动的网站?

javascript - 窗口位置目标_blank

node.js - 类型错误 : Cannot read property 'wanted' of undefined: