拦截(并可能拒绝)networking套接字升级请求

我有一个Node.js服务器,我正在发送一个Web套接字升级请求。 此请求的授权标头包含login信息,我需要与数据库条目进行比较。 我不确定如何停止打开Web套接字连接,直到我的数据库查询callback被执行。

以下是我目前正在做的简化:

var Express = require('express') var app = Express() server = app.listen(app.get("port"), function () {}) server.on("upgrade", function (request, socket) { //Query database //On success set "authenticated" flag on request (later accessed through socket.upgradeReq) //On failure abort connection }) 

这个工作,但是有一个短暂的时间sockets打开,但我没有validation授权标题,所以恶意用户可能会发送/接收数据。 我通过使用“authentication”标志来减轻这种风险,但似乎必须有更好的方法。

我尝试了以下的东西,但他们似乎拦截除升级之外的所有请求:

 Attempt #1: app.use(function (request, response, next) { //Query database, only call next if authenticated next() }) Attempt #2: app.all("*", function (request, response, next) { //Query database, only call next if authenticated next() }) 

可能值得注意的是:我也有一个HTTP服务器,它使用相同的端口并接受POST请求进行注册和login。

感谢您的任何帮助,请让我知道是否需要额外的信息。