我有一个简单的登录脚本。我在 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)
答案 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行为:每当套接字订阅模型实例时,它也将开始“观察”该模型类的“创建”事件。