【发布时间】:2015-02-23 03:32:12
【问题描述】:
最新的 ExpressJS 不再从 http.Server 继承。
如果我尝试侦听upgrade 事件,服务器将回复404 Not Found。
当前[简化]代码是:
app.on('upgrade', function(req, socket, head) { /* ... */ });
如果我尝试在 Google 上搜索答案,我只会找到与“3.0 -> 4.0 express upgrade”相关的链接,而不是 HTTP 升级。
编辑:
应@jfriend00 的要求,我的快速初始化[简化]代码:
app = express.createServer();
app.listen(self.port, self.ipaddress);
【问题讨论】:
-
我认为 Express 从未从 http 服务器继承。它为您的服务器提供请求侦听器。如果您在 Express
app对象上调用.listen(),它将为您创建一个 http.Server,如下所示:var server = http.createServer(this);。因此,您关于不使用 http.Server 的假设似乎是错误的。您应该能够在 http 服务器对象上使用 this technique 来监听升级事件。 -
请显示您的 express 初始化代码,以便我们指导您如何使用 http 服务器对象而不是 Express 对象来执行此操作。
-
express.createServer()已被弃用很长时间,并已从 Express 4 中删除。您可以使用var app = express()在 Express 4 中创建app对象。如果您需要直接访问 http 服务器对象,则从var server = app.listen(...)返回 http 服务器对象。您使用的是哪个版本的 Express? -
几秒前我升级到 ExpressJS 4.11.2。进行了您提到的更改后,它仍然无效。
upgradeing 对app.listen返回的对象似乎不起作用。而且我仍然看到 ExpressJS 注入的像X-Powered-By:"Express"这样的标头。 -
抱歉,我们看不到的代码很难评论。如果您使用的是 Express,我不知道您为什么会惊讶地看到 Express 标头。