Skip to content

Instantly share code, notes, and snippets.

@PaquitoSoft
Last active August 29, 2015 14:20
Show Gist options
  • Save PaquitoSoft/8e276b7b7d691455b848 to your computer and use it in GitHub Desktop.
Save PaquitoSoft/8e276b7b7d691455b848 to your computer and use it in GitHub Desktop.
Mongoose model basic express routes
'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