Skip to content

Instantly share code, notes, and snippets.

@flockonus
Created December 19, 2011 03:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save flockonus/1495306 to your computer and use it in GitHub Desktop.
Save flockonus/1495306 to your computer and use it in GitHub Desktop.
One way to (sort of) rest (w Mongoose)
var build = require('./crud.js').build
var gameController = build('Game')
// how to get this automatic? remember middleware
app.get( '/games', gameController.index)
app.get( '/games/:id', gameController.show)
app.post( '/games', gameController.save)
app.post( '/games/:id/delete', gameController.destroy)
/*
* Rely on GLOBAL.app for a express server
* and GLOBAL.models for models defined (mongoose)
*/
function build(modelName, options){
function loadOne(id, cb) {
};
var controller = {
name: modelName,
index: function(req, res, next){
app.models[modelName].find({}, function(err, docs) {
res.json(
docs.map(function(e,i){ return e.toJSON() })
)
})
},
show: function(req, res, next){
// console.log( req.params.id )
app.models[modelName].findById( req.params.id , function(err, doc) {
if(err) res.json([0])
res.json( doc )
})
},
//edit: function(req, res, next){ },
save: function(req, res, next){
if( req.body && req.body[modelName.toLowerCase()] ){
saveCb = function(err, doc) {
// TODO
}
if( req.body[modelName.toLowerCase()]._id ){ //UPDATE
app.models[modelName].update({ _id: req.body[modelName.toLowerCase()]._id },
req.body[modelName.toLowerCase()],
saveCb
)
} else { // CREATE
(new app.models[modelName](req.body[modelName.toLowerCase()])).save( saveCb )
}
// FIXME
res.json( [1] )
} else {
res.json( [0] )
}
},
destroy: function(req, res, next){
if( req.params && req.params.id ){
res.json( [0] )
} else {
app.models[modelName].remove({ _id: req.params.id }, function(err, doc) {
res.json( doc.toJSON() )
})
}
},
}
return controller
}
exports.build = build
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment