Skip to content

Instantly share code, notes, and snippets.

@alesanabriav
Last active July 30, 2016 22:05
Show Gist options
  • Save alesanabriav/79db1d0b29be1f7507f2acf68f2c5eaf to your computer and use it in GitHub Desktop.
Save alesanabriav/79db1d0b29be1f7507f2acf68f2c5eaf to your computer and use it in GitHub Desktop.
quick api with express & mongoose.
'use strict';
import _ from 'lodash';
export default function api(model) {
return {
all(req, res) {
let populate = req.query.populate ? req.query.populate : '';
let find = req.query.find ? JSON.parse(req.query.find) : {};
let sort = req.query.order ? JSON.parse(req.query.order) : {};
let query = model
.find(find)
.populate(populate)
.sort(sort)
.exec((err, collection) => {
if(err) return Promise.reject(err);
return Promise.resolve(collection);
});
return query;
},
getOne(id, populate) {
let query = model
.findOne({_id: id})
.populate(populate)
.exec((err, item) => {
if(err) return Promise.reject(err);
return Promise.resolve(item);
});
return query;
},
get(req, res) {
var populate = req.query.populate ? req.query.populate : '';
return this.getOne(req.params.id, populate);
},
store(req, res) {
var data = req.body;
var Model = new model(data);
var populate = req.query.populate ? req.query.populate : '';
var query = Model
.save()
.then(result => {
return this.getOne(result._id, populate);
})
.then(result => {
return Promise.resolve(result);
})
.catch(err => {
return Promise.reject(err.errors);
});
return query;
},
update(req, res) {
var populate = req.query.populate ? req.query.populate : '';
var id = req.params.id;
model
.update({_id: id}, req.body , {runValidators: true})
.exec((err, result) => {
if(err) return Promise.reject(err);
this.getOne()
.then(item => {
return Promise.resolve(item);
})
.catch(err => {
return Promise.reject(err.errors);
});
});
},
destroy(req, res) {
model.findByIdAndRemove(req.params.id, (err) => {
if(err) return res.status(400).json(err);
return res.status(200).json({deleted: req.params.id});
});
},
errortMessages(err) {
var errors = [];
_.mapValues(err, (val) => {
var str = 'Cast to ObjectID failed for value';
if(str.indexOf != -1)
{
arr.push('objectId error');
} else {
arr.push(val.message)
}
});
return errors;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment