3.4 KiB
Collection Events Reference
Events allow you to add custom logic to your Collection using JavaScript. Deployd is compatible with ECMAScript 5, so you can use functional-style programming, such as forEach(), map(), and filter().
APIs
this
The current object is represented as this. You can always read its properties. Modifying its properties in an On Get request will change the result that the client recieves, while modifying its properties in an On Post, On Put, or On Validate will change the value in the database.
// Example: On Validate
// If a property is too long, truncate it
if (this.message.length > 140) {
this.message = this.message.substring(0, 137) + '...';
}
Note: In some cases, the meaning of this will change to something less useful. If you are using functional programming (i.e. Array.forEach()), you may need to bind another variable to this:
// Example: On Validate
// Tally a score
var self = this;
self.sum = 0;
self.targets.forEach(function(t) {
self.sum += t.points;
});
me
The currently logged in User from a User Collection. undefined if no user is logged in.
// Example: On Post
// Save the creator's information
this.creatorId = me.id;
this.creatorName = me.name;
query
The query string object. Includes id on a specific query.
// Example: On Get
// Don't show the body of a post in a general query
if (!query.id) {
hide(this.body);
}
cancel(message, [statusCode])
Stops the current request with the provided error message and statusCode. Commonly used for security and authorization.
// Example: On Post
// Don't allow non-admins to create items
if (!me.admin) {
cancel("You are not authorized to do that", 401);
}
error(key, message)
Adds an error message to an errors object in the response. Cancels the request, but continues running the event so as to collect multiple errors to display to the user. Commonly used for validation.
// Example: On Validate
// Don't allow certain words
// Returns response {"errors": {"name": "Contains forbidden words"}}
if (!this.name.match(/(foo|bar)/)) {
error('name', "Contains forbidden words");
}
hide(property)
Hides a property from the response.
// Example: On Get
// Don't show private information
if (!me || me.id !== this.creatorId) {
hide('secret');
}
protect(property)
Prevents a property from being updated.
// Example: On Put
// Protect a property
protect('createdDate');
emit([userCollection, query], event, [data])
Emits a realtime event to the client - see [Dpd.js Reference] for how to listen for events.
You can use userCollection and query to limit the event broadcast to specific users.
// Example: On Put
// Alert the owner that their post has been modified
if (me.id !== this.creatorId) {
emit(dpd.users, {id: this.creatorId}, 'postModified', this);
}
dpd
The entire dpd.js library, except for dpd.on(), is available from events. It will also properly bind this in callbacks.
// Example: On Get
// If specific query, get comments
dpd.comments.get({postId: this.id}, function(results) {
this.comments = results;
});
// Example: On Delete
// Log item elsewhere
dpd.archived.post(this);
console.log([arguments]...)
Logs the values provided to the command line. Useful for debugging.