.subscribe(request
,records
,[contexts
])
Purpose
This subscribes clients to one or more existing model instances (records). It allows clients to see message emitted by .publishUpdate(), .publishDestroy(), .publishAdd() and .publishRemove().
Description | Accepted Data Types | Required ? | |
---|---|---|---|
1 | Request | Request object |
Yes |
2 | Records | [] , object |
Yes |
3 | Contexts to subscribe to | string , array |
No |
Note: subscribe
will only work when the request is made over a socket connection (e.g. using socket.get
), not over an http connection (e.g. using jquery.get
).
context
If you specify a specific context (or array of contexts) to subscribe to, you will only get messages sent in that context. For example, User.subscribe(socket, user, 'update')
will cause the socket to receive messages only when publishUpdate
is called for user
. Subsequent calls to subscribe
are cumulative, so if you called User.subscribe(socket, user, 'destroy')
later with the same socket, that socket would then be subscribed to messages from both publishUpdate
and publishDestroy
.
You can omit context
to subscribe a socket to the default contexts for that model class. The default contexts are defined by the autosubscribe
property of the model class. If autosubscribe
is not present, then the default contexts are update
, destroy
, message
(for custom messages), add:*
and remove:*
(publishAdd and publishRemove messages for associated models).
Example Usage
Controller Code
// Subscribes client to ONLY the create and destroy events for every `User` record.
User.find({}).exec(function(e,listOfUsers){
User.subscribe(req.socket,listOfUsers,['create','destroy']);
});
// Don't forget to handle your errors
Blueprints and .subscribe()
By default, the blueprint
find
andfindOne
actions will call.subscribe()
to subscribe a requesting socket to all returned records. However, the blueprintupdate
anddelete
actions will not cause a message to be sent to the requesting socket by default--only to the other connected sockets. This is intended to allow the caller ofio.socket.update()
(for example) to use the client-side SDK's callback to handle the server response separately. To force the blueprint actions to send messages to all sockets, including the requesting socket, setsails.config.blueprints.mirror
totrue
.