我正在研究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);
特别是订阅publishUpdate
和publishDestroy
的工作正常。
对于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()'
之间有什么区别?答案 0 :(得分:3)
我更愿意发表评论(缺乏代表......),但是你给了the docs一个好的读物吗?
您无法像User.subscribe(req.socket)
那样拨打.subscribe。它需要第二个参数records
。因此,如果用户是用户模型实例列表,则User.subscribe(req.socket, users);
应该有用。
我没有节点或风帆的专家(根本没有...),但是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);
});
}
这样,每次创建,销毁或更新记录时都会收到一条消息。