2014-03-25 52 views
2

我有点困惑,我需要从我的路由文件传入数据时如何与套接字进行交互。我有使用node.js,express,mongodb等的标准设置。将req res对象传递给socket.io?

我将在server.js中运行我的socket.io逻辑,并在该文件中包含routes.js。

var routes = require('./app/routes');

在这种情况下,我需要运行在我的routes.js文件中的一些io.sockets。

我的问题是什么是这样做的好方法?我可以在server.js中运行该特定的路由,但会变得混乱。如果我在我的routes.js使用套接字,我需要重新要求

var io = require('socket.io').listen(server);

这意味着我需要建立一个新的HTTP服务器对象,我不喜欢这样,因为我需要这个文件在server.js中,这对我来说似乎是一个反直觉的举动。

那么如何向服务器发送请求并传递例如用户名呢?

例子:

app.get('/profile', isLoggedIn, function(req, res) { 

    res.render('profile', { user : req.user }); 

    io.sockets.on('connection', function (socket) { 
     console.log(socket); 
      console.log(req.user); // Here I have access to the user and can pass that around in      my sockets 
    }); 

}); 

我也使用路由中间件,所以我想继续在我的routes.js,IDK我只是困惑我应该做的,希望有人了解我角度在这里?

编辑:

关于通过东西向的路线是什么?

routes.initialize(app, passport); 
+0

socket.io和express是使用完全不同的协议工作的两种不同的框架,您尝试执行的操作无法工作.Express应该提供初始(html)PAYLOAD,然后让socket.io执行此操作,当客户端尝试连接到socket.io(使用JavaScript)。但不要尝试混搭两者。它不能工作。 – mpm

+0

是的,但他们仍然应该能够传递数据..我将'io'对象传入路由。 'routes.initialize(app,passport,io);'我现在可以访问这个对象,并且可以在我的routes.js中创建一个新的套接字连接 –

+0

与用户创建实时聊天的最佳方式是添加用户那些登录到数据库的套接字,只是创建一个包含响应的对象。当用户注销时,我将从对象中删除用户名。 –

回答

-1

您可以直接在插座通过调用socket.request(一Getter功能,通过__proto__可用)获得reqres对象。 See docs

我当时能够在socket.request.client.user中找到req.user