【问题标题】:How to use socket.io in app route如何在应用程序路由中使用 socket.io
【发布时间】:2013-01-28 22:32:42
【问题描述】:

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

我检查邮箱和密码是否有效,如果无效,我想向客户端推送一个json对象。

我使用这个应用路由:

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 使用全局授权?

【问题讨论】:

  • 为什么要使用 socket.io 从帖子中发回错误。在这种情况下,我只会通过回复发送错误。
  • 你的意思是像本地人吗? res.render('index', {locals: {errors : errors}});?我用它来列出errorsjade,但是我怎样才能将json 对象传递给javascript 客户端函数呢?或者回复帖子的常用方式是什么?

标签: node.js express socket.io emit


【解决方案1】:

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

on("connection", ...) 上做类似的事情:

socket.join(room) 其中房间是会话独有的东西(例如会话 ID)。

然后只发回给一个用户:

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

【讨论】:

    猜你喜欢
    • 2016-10-18
    • 1970-01-01
    • 2019-10-17
    • 2018-10-06
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    相关资源
    最近更新 更多