SailsJS,SocketIO,没有收到消息

时间:2014-03-20 20:26:54

标签: javascript node.js socket.io sails.js

我有一个简单的登录脚本。我在 SessionController 中创建了一个名为 create 的方法来处理登录。我执行所有必需的验证,然后将用户设置为活动并保存它们。我还使用User.publishUpdate()将消息发送回客户端。

问题是我根本没有收到任何消息。加载页面后,我为所有用户调用User.subscribe(req.socket, users);,以便他们全部订阅。不确定为什么不发送消息。

我使用风帆0.10.0。

这是在页面加载时调用的 subscribe 方法:

User.find({}).exec(function (error, users) {
    if (error) {
        res.json({
            error: error
        });
    }

    // Subscribe to the model class
    User.subscribe(req.socket);

    // subscribe to the model instance
    User.subscribe(req.socket, users);

    res.send(200);

});

登录的创建方法(删除了与此问题无关的代码):

user.active = true;
req.session.authenticated = true;
req.session.User = user;

user.save(function (error, user) {

    if (error) {
        res.send(error, 500);
    }

    User.publishUpdate(user.id, {
        loggedIn: true,
        id: user.id,
        action: ' has logged in'
    });

    res.json(user, 200);
});

我通过套接字将请求发送到订阅和登录方法

socket.get('/user/subscribe');

socket.get('/session/create', {//stuff}, callback)

1 个答案:

答案 0 :(得分:11)

PubSub与Sails v0.10相比发生了很大变化,看起来你正在使用一些v0.9.x语义。您可以在migration guide和新Model Methods reference中阅读所有相关内容,但就您的影响而言,主要是:

不再使用“message”事件发布消息。而是使用模型的标识作为事件名称发布消息。所以,将你的听众改为:

socket.on('user', callback)

你会开始听到的。

与您有关的另一件事是不推荐使用“Model classrooom”,就像使用.subscribe()一个参数订阅它一样。而是使用User.watch(req)来获取有关新创建的用户的通知。

更新以及.watch()方法,autoWatch中现在还有一个sails.config.blueprints选项(在config/blueprints.js文件中设置)如果true,将恢复到v0.9.x行为:每当套接字订阅模型实例时,它也将开始“观察”该模型类的“创建”事件。