Last active
August 29, 2015 14:20
-
-
Save PaquitoSoft/8e276b7b7d691455b848 to your computer and use it in GitHub Desktop.
Mongoose model basic express routes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
/* | |
Credits to Jakob Mattsson | |
Link: https://vimeo.com/51736205 | |
*/ | |
function _createModelRoutes(modelName, app) { | |
var Model = models[modelName], | |
// http://stackoverflow.com/questions/8955533/javascript-jquery-split-camelcase-string-and-add-hyphen-rather-than-space | |
routeName = modelName.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); | |
console.log('Configuring model (%s) basic routes...', modelName); | |
app.get('/' + routeName, function _finderRoute(req, res, next) { | |
var offset = req.query.offset = || 0, | |
size = req.query.size || 2, | |
sortBy = req.sortBy || 'id', | |
query; | |
query = Model.find() | |
.skip(offset * size) | |
.limit(size) | |
.sort(sortBy); | |
if (req.query.exclude) { | |
query.select('-' + req.query.exclude.split(',').join(' -')); | |
} | |
query.exec(function _finderResult(err, data) { | |
err ? next(err) : res.json(data); | |
}); | |
}); | |
app.get('/' + routeName + '/:id', function _getHandler(req, res, next) { | |
Model.findById(req.params.id, function _getResult(err, data) { | |
err ? next(err) : res.json(data); | |
}); | |
}); | |
app.post('/' + routeName, function _postHandler(req, res, next) { | |
var instance = new Model(req.body); | |
instance.save(function _saveResult(err, data) { | |
err ? next(err) : res.json(data); | |
}); | |
}); | |
app.put('/' + routeName + '/:id', function _putHandler(req, res, next) { | |
Model.update({ _id: req.params.id }, req.body, { multi: false }, function _putResult(err, count) { | |
err ? next(err) : res.json({ count: count }); | |
}); | |
}); | |
app.del('/' + routeName + '/:id', function _deleteHandler(req, res, next) { | |
Model.remove({ _id: req.params.id }, function _deleteResult(err, count) { | |
err ? next(err) : res.json({ count: count }); | |
}); | |
}); | |
} | |
module.exports.configureModelsBasicRoutes = function _configureModelsBasicRoutes(models, app) { | |
Object.keys(models).forEach(function _modelsIterator(modelName) { | |
__createModelRoutes(modelName, app); | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment