Sails 0.10 ModelIdentity.subscribe或.watch以及publishCreate()?

时间:2014-06-09 13:59:45

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

我正在研究SailsCasts,我正在研究 SailsJS测试版0.10

一切正常,除非在 0.9.7 中,我使用它:

//subscribe this socket to the User model classroom
User.subscribe(req.socket);

// subscribe this socket to the user instance rooms
User.subscribe(req.socket, users);
  • 如何为0.10做这个?

特别是订阅publishUpdatepublishDestroy的工作正常。

对于publishCreate,我需要'User.subscribe(req.socket)'并且我在控制台中有警告:

debug: Deprecated: Model.subscribe(socket, null, ...)
debug: (see http://links.sailsjs.org/docs/config/pubsub)
debug: Please use instance rooms instead (or raw sails.sockets.*() methods.)

然后:

  • 'model.watch()''model.subscribe()'之间有什么区别?

2 个答案:

答案 0 :(得分:3)

问题1

我更愿意发表评论(缺乏代表......),但是你给了the docs一个好的读物吗?

您无法像User.subscribe(req.socket)那样拨打.subscribe。它需要第二个参数records。因此,如果用户是用户模型实例列表,则User.subscribe(req.socket, users);应该有用。

问题2

我没有节点或风帆的专家(根本没有...),但是the docs - watch声明model.watch()订阅客户端以发布模型实例的创建事件。我没有提到publishUpdate,publishDestory等。我认为它只会监视创建事件。 .subscribe()获取模型列表(或模型),并为该模型实例列表订阅客户端以发布addAdd,publishDestroy,publishRemove,publishUpdate事件(默认情况下)。您还可以指定要订阅的上下文。

因此,如果您只想发送套接字publishCreate事件,那么您实际上似乎想要使用User.watch(req.socket)而不是.subscribe()。如果您需要所有这些内容,请使用User.subscribe(req.socket,users,[create,update,destroy,])之类的内容。 如果您想变得很酷,可以将autosubscribe属性设置为包含您关注的上下文列表,并使用User.subscribe(req.socket,users) the docs - context

干杯

答案 1 :(得分:1)

为了订阅模型:

subscribe: function(req, res) {
    Model.find().exec(function(err, records) {
        YourModel.subscribe(req.socket, records);
        YourModel.watch(req);
    });
}

这样,每次创建,销毁或更新记录时都会收到一条消息。