To enable:
var now_mongoose = require('now-mongoose');
everyone.now.MODEL_NAME = now_mongoose.model( MODEL_CLASS );
Parameters are:
- the MongooseJS model class you created using the mongoose.model() api
For example, let's say you have a mongoose model named Adventure which you want to expose to connected clients via a real-time API:
SERVER SIDE
// connect to db
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/usefuldb');
// create server
var express = require('express');
var mongoose = require('mongoose');
var nowjs = require('now');
var everyone = nowjs.initialize(app);
var now_mongoose = require('now-mongoose');
var AdventureSchema = new mongoose.Schema({
title: { type: String, required: true },
description: { type: String, required: true },
rsvps: [{ type: mongoose.Schema.ObjectId, ref: 'User' }]
});
AdventureSchema.statics.rsvp = function(adventure_id, user_id, callback){
this.findById( adventure_id, function(err,adventure){
adventure.rsvps.push(user_id);
adventure.save(function(err){
callback(err,adventure);
});
});
};
var Adventure = mongoose.model( 'Adventure', AdventureSchema );
everyone.now.Adventures = now_mongoose.model( Adventure )
Now on the CLIENT SIDE, you can do this:
now.Adventure.search(function(err,adventures){ console.log(adventures) });
> Retrieves all Adventures in the DB and returns them to the callback
now.Adventure.search( {title: 'International Skeeball'}, function(err,adventures){ console.log( adventures ); });
> Retrieves Adventures with the title 'International Skeeball' and returns them to the callback
now.Adventure.save( { title: 'Irish Coffee Marathon',
description: 'Beats the hell outta actually running'
}, function(err,adventure){
console.log( adventure )
}
);
> Creates a new Adventure with the given title and description and returns it to the callback
now.Adventure.save( { _id: '4efadce3223444adf',
title: 'Irish Coffee Marathon of Doom'
}, function(err,adventure){
console.log( adventure )
}
);
> Updates the given Adventure with the parameters you pass, in this case an updated title
now.Adventure.get( '43edaff3243242a334423',
function(err, adventure){
console.log( adventure )
}
);
> Retrieves the Adventure with the given id and returns it to the callback
In addition, now-mongoose also exposes all static methods defined on your Mongoose model to the NowJS client, so using the example above, calling:
var adventure_id = '43ee432429898432iadfsdf';
var user_id = '33334524543523242ff';
now.Adventure.rsvp( adventure_id, user_id, function( err, adventure ) );
would work and return you the updated adventure after the new rsvp was saved for the given user id.
NOTE: Model instance level methods are more tricky and I haven't figured out how to proxy those yet, any suggestions welcome!