UNPKG

mlab-crud

Version:

Simple crud router creation for mlab

91 lines (72 loc) 2.8 kB
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;