Node js多路由获取socket

Node js multiple routes get socket

我正在使用 NodeJS、socket.io 和 express 创建应用程序,我想知道如何确定哪个套接字 (id/user) 在哪个路由器上? 例如,我的网站上有 10 个用户,我有 3 条路线:/home、/about、/contact。我怎么知道哪个用户在哪个路由器上?

首先要了解 "which user" 本身,您需要一个带有 session 和 cookie 的系统,以便在他们每次发出不同请求时识别特定用户。 Passport.JS 让这变得非常简单。

其次,要在 Express 路由和 Socket.io 处理程序之间共享同一个用户,需要在两者之间共享 session 信息。对于 Passport.js,socket.io-passport 可以做到这一点。

最后,当 client-side Socket.io 通过 io.connect() 向服务器发起连接请求时,它将请求的引用 header 设置为当前 URL ,可以在 server-side 上使用 socket.request.headers.referer

访问

所有这些都准备就绪后,您终于可以分辨出哪个用户在哪条路线上了:

app.get('/about', function(req, res, next){
    // req.user is on '/about' path
});
var URL = require('url');
io.on('connection', function(socket) {
    var user = socket.request.user;
    var path = URL.parse(socket.request.headers.referer).path;
    // user is on -> path
});