SailsJS,SocketIO,没有收到消息

Car*_*ham 3 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);

});
Run Code Online (Sandbox Code Playgroud)

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

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);
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

sgr*_*454 11

使用Sails v0.10,PubSub已经发生了很大变化,看起来你正在使用一些v0.9.x语义.您可以在迁移指南和新的模型方法参考中阅读所有相关内容,但就您的影响而言,主要是:

不再使用"message"事件发布消息. 相反,它们使用模型的标识作为事件名称发布.所以,将你的听众改为:

socket.on('user', callback)
Run Code Online (Sandbox Code Playgroud)

你会开始听到一些东西.

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

随着.watch()方法一起更新,现在还有一个autoWatch选项sails.config.blueprints(在您的config/blueprints.js文件中设置),如果true,将恢复到v0.9.x行为:任何时候套接字订阅模型实例,它也将启动"观看"那个模型类为"创造"事件.