3

我正在研究SailsCasts并且正在开发SailsJS beta 版本 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()'
4

2 回答 2

3

问题 1

我更愿意发表评论(缺乏代表......),但你有没有好好阅读文档?

您不能像 .subscribe 一样调用 .subscribe User.subscribe(req.socket)。它需要第二个参数records。因此User.subscribe(req.socket, users);,如果 users 是用户模型实例的列表,您应该可以工作。

问题2

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

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

干杯

于 2014-06-09T15:06:56.733 回答
1

为了订阅模型:

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

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

于 2015-01-14T09:27:13.513 回答