mlab-crud
Version:
Simple crud router creation for mlab
91 lines (72 loc) • 2.8 kB
JavaScript
let errorHandler = require('./utils').errorHandler;
let Router = require('express').Router;
let ObjectID = require("mongodb").ObjectID;
// @TODO: set req body or query to err response
class BaseOperations {
constructor(_db, _collection) {
this.db = _db;
this.collection = _collection;
}
getRouter(routerName) {
let router = new Router();
router.get('/' + routerName || this.collection, this.getRequest.bind(this));
router.post('/' + routerName || this.collection, this.postRequest.bind(this));
router.put('/' + routerName || this.collection, this.putRequest.bind(this));
router.delete('/' + routerName || this.collection, this.deleteRequest.bind(this));
return router;
}
//<editor-fold desc="Mongo collection methods">
getEntities(successCallback, errorCallback, query) {
let entities = this.db.collection(this.collection);
query = query || {};
entities
.find(query)
.toArray((err, items) => {
err && errorCallback(err);
!err && successCallback(items);
});
}
addEntity(entityToAdd, successCallback, errorCallback) {
let entities = this.db.collection(this.collection);
entities.insertOne(entityToAdd, (err, item) => {
err && errorCallback(err);
!err && successCallback(item);
});
}
//set update query if needed
updateEntity(entityToUpdate, successCallback, errorCallback) {
let entities = this.db.collection(this.collection);
let objectId = ObjectID(entityToUpdate._id);
delete entityToUpdate._id;
entities.updateOne({_id: objectId}, {$set: entityToUpdate})
.then(successCallback);
}
//</editor-fold>
//<editor-fold desc="Requests handlers">
getRequest(req, resp) {
let query = req.query.query ? JSON.parse(req.query.query) : {};
this.getEntities(
items => resp.send(items),
err => errorHandler(resp, err), query);
}
postRequest(req, resp) {
let entity = req.body.entity;
this.addEntity(entity,
addedItem => resp.send(addedItem.ops[0]),
err => errorHandler(resp, err));
}
putRequest(req, resp) {
let entity = req.body.entity;
this.updateEntity(entity,
addedItem => resp.send(addedItem),
err => errorHandler(resp, err));
}
deleteRequest(req, resp) {
let entity = req.body.entity;
let entities = this.db.collection(this.collection);
entities.deleteOne({_id: ObjectID(entity._id)})
.then(removedItem => resp.send(removedItem));
}
//</editor-fold>
}
module.exports.Base = BaseOperations;