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行为:任何时候套接字订阅模型实例,它也将启动"观看"那个模型类为"创造"事件.