如何在app路由中使用socket.io

时间:2013-01-28 22:32:43

标签: node.js express socket.io emit

我用nodejs开发了我的第一个项目。我使用express 3作为框架,使用socket.io作为客户端服务器通信。目前我正在尝试创建一个注册表单。它工作得很好,但我不确定如何正确使用socket.ioexpress

我检查电子邮件和密码是否有效,如果不是,我想将json对象推送给客户端。

我使用这个app路线:

app.post('/user', function (req, res) {
    var user = new User(req.body.user), 
        errors;

    function userSaveFailed() {
        res.render('index');
    }

    errors = user.validation(req.body.user.confirm);
    user.save(errors, function (err) {
        if (err) {
            // Here I would like to send the Object to the client.
            io.sockets.on('connection', function (socket) {
                socket.emit('registration', {
                    errors : errors
                });
            });
            return userSaveFailed();
        }
        res.render('user/new.jade');
    });
});

好吧,客户端获取json对象,但如果另一个客户端连接到'/',他也会获取该对象。我想我使用socket.io错了。在应用路线中使用.emit()的常用方法是什么?是否有必要对socket.ioexpress使用全局授权进行此测试?

1 个答案:

答案 0 :(得分:1)

这样做的一种方法(如果你真的想使用socket.io来回复帖子,你可能不应该这样做),就是每个用户会话使用一个房间。

所以在on("connection", ...)做类似的事情:

socket.join(room)其中会议室是会话的唯一内容(例如会话ID)。

然后发回给一个用户:

socketio.of('/')['in'](room).emit(...);,空间与上面使用的唯一ID相同。