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
});
我正在使用 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
});