Skip to content

rahil471/express-mongo-crud

Repository files navigation

express-mongo-crud

Express middleware to instantly add crud apis for your mongoose express application. You only need to define the models and include the middleware. The CRUD apis exposed can be used in conjunction with your existing or new APIs.

Tutorial

https://ciphertrick.com/2017/03/29/easily-add-mongo-crud-apis-nodejs-express-project/

Usage

Installation

npm i express-mongo-crud --save

Middleware

var express = require('express');
var app = express();
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var PORT = 3000;

// REQUIRE MIDDLEWARE
var instantMongoCrud = require('express-mongo-crud'); // require the module



mongoose.connect('localhost:27017/mongocrud');

var options = { //specify options
	host: `localhost:${PORT}`
}

//USE AS MIDDLEWARE
app.use(bodyParser.json()); // add body parser
app.use(instantMongoCrud(options)); // use as middleware

app.listen(PORT, ()=>{
	console.log('started');
})

Models

By default the express-mongo-crud will look for models directory in the root path (ie: as the same level on node_modules). express-mongo-crud will expose CRUD APIs for any model added to this directory.

A model file should follow the following convention. <modelname>.model.js

A model is a mongoose schema with extra options as configuration

module.exports = function(mongoose){
    return [{
    name: {type: String, required: true},
    description: {type: String},
    uniqueId: { type: String, required: true, index: true, unique: true},
    email: {type: String},
    authorSite: {type: String},
    authorImg: {type: String},
    banner: {type: String},
    authorTag: {type: String},
    location: {type: String},
    slug: {type: String},
    socialLinks: {type: Object},
    isApplicationUser: {type: Boolean, default: false},
    status: {type: String, default: 'active', enum: ['active', 'inactive', 'deleted']},
    appUserDetails: {
        id: {type: mongoose.Schema.Types.ObjectId},
        email: {type: String}
    }
}, {
    timestamps: true,
    createdby: true,
    updatedby: true
}]
};

APIs

The following APIs are supported for now.

  • list documents: GET /{model}/list
  • Add document: POST - /{model}
  • Update document: PUT - /{model}/{_id}
  • Fetch a document: GET - /{model}/{_id}
  • Delete: DELETE - /{model}/{_id}

Swagger Suite

The project provides a swagger suite and would be made availaible at <host>/apidoc

ScreenShot

Todos

  • configurable models directory
  • proper error handling
  • Support for mongoose populate in list
  • Adding prefix path
  • Advance swagger documentation - Per model grouping/taging for swagger
  • Configure project name in swagger doc
  • Support for joi validations