Ninjas Practicing Multidimensionality
    Wondering what’s next for npm?Check out our public roadmap! »

    express-mongoose-generator

    3.1.0 • Public • Published

    Build Status

    express-mongoose-generator

    It’s a mongoose model, REST controller and Express router code generator for Express.js 4 application.

    Installation

    $ npm install -g express-mongoose-generator

    Usage

    Non-Interactive mode

    Generates a Mongoose model, a REST controller and Express router :

    $ mongoose-gen -m car -f carDoor:number,color -r
            create: ./models/cardModel.js
            create: ./routes/cardRoutes.js
            create: ./controllers/cardController.js
    Options
    • -m, --model <modelName> - the model name.
    • -f, --fields <fields> - the fields (name1:type,name2:type).
    • -r, --rest - enable generation REST.
    • -t, --tree <tree> files tree generation grouped by (t)ype or by (m)odule
    • --ts generate TypeScrypt files
    Available types
    • string
    • number
    • date
    • boolean
    • array
    • objectId

    Interactive mode

    Generates a Mongoose model, a REST controller and Express router :

    $ mongoose-gen
    Model Name : car
    Available types : string, number, date, boolean, array
    Field Name (press <return> to stop adding fields) : door
    Field Type [string] : number
    Field Name (press <return> to stop adding fields) : color
    Field Type [string] : 
    Field Name (press <return> to stop adding fields) : owner
    Field Type [string] : objectId
    Reference (model name referred by the objectId field) : User
    Field Name (press <return> to stop adding fields) : 
    Generate Rest (yes/no) ? [yes] : 
    Files tree generation grouped by Type or by Module (t/m) ? [t] : 
            create: ./models/carModel.js
            create: ./routes/carsRoutes.js
            create: ./controllers/carController.js

    Rendering

    Model

    models/carModel.js :

    var mongoose = require('mongoose');
    var Schema   = mongoose.Schema;
    
    var carSchema = new Schema({
    	"color" : String,
    	"door" : Number,
        "owner" : {
            type: Schema.Types.ObjectId,
            ref: 'User'
        }
    });
    
    module.exports = mongoose.model('car', carSchema);

    Router

    routes/carRoutes.js :

    var express = require('express');
    var router = express.Router();
    var carController = require('../controllers/carController.js');
    
    /*
     * GET
     */
    router.get('/', carController.list);
    
    /*
     * GET
     */
    router.get('/:id', carController.show);
    
    /*
     * POST
     */
    router.post('/', carController.create);
    
    /*
     * PUT
     */
    router.put('/:id', carController.update);
    
    /*
     * DELETE
     */
    router.delete('/:id', carController.remove);
    
    module.exports = router;

    Controller

    controllers/carController.js :

    var carModel = require('../models/carModel.js');
    
    /**
     * carController.js
     *
     * @description :: Server-side logic for managing cars.
     */
    module.exports = {
    
        /**
         * carController.list()
         */
        list: function(req, res) {
            carModel.find(function(err, cars){
                if(err) {
                    return res.status(500).json({
                        message: 'Error getting car.'
                    });
                }
                return res.json(cars);
            });
        },
    
        /**
         * carController.show()
         */
        show: function(req, res) {
            var id = req.params.id;
            carModel.findOne({_id: id}, function(err, car){
                if(err) {
                    return res.status(500).json({
                        message: 'Error getting car.'
                    });
                }
                if(!car) {
                    return res.status(404).json({
                        message: 'No such car'
                    });
                }
                return res.json(car);
            });
        },
    
        /**
         * carController.create()
         */
        create: function(req, res) {
            var car = new carModel({
    			color : req.body.color,
    			door : req.body.door
            });
    
            car.save(function(err, car){
                if(err) {
                    return res.status(500).json({
                        message: 'Error saving car',
                        error: err
                    });
                }
                return res.json({
                    message: 'saved',
                    _id: car._id
                });
            });
        },
    
        /**
         * carController.update()
         */
        update: function(req, res) {
            var id = req.params.id;
            carModel.findOne({_id: id}, function(err, car){
                if(err) {
                    return res.status(500).json({
                        message: 'Error saving car',
                        error: err
                    });
                }
                if(!car) {
                    return res.status(404).json({
                        message: 'No such car'
                    });
                }
    
                car.color =  req.body.color ? req.body.color : car.color;
    			car.door =  req.body.door ? req.body.door : car.door;
    			
                car.save(function(err, car){
                    if(err) {
                        return res.status(500).json({
                            message: 'Error getting car.'
                        });
                    }
                    if(!car) {
                        return res.status(404).json({
                            message: 'No such car'
                        });
                    }
                    return res.json(car);
                });
            });
        },
    
        /**
         * carController.remove()
         */
        remove: function(req, res) {
            var id = req.params.id;
            carModel.findByIdAndRemove(id, function(err, car){
                if(err) {
                    return res.status(500).json({
                        message: 'Error getting car.'
                    });
                }
                return res.json(car);
            });
        }
    };

    With files tree generation by module

    Files tree generation grouped by Type or by Module (t/m) ? [t] : m
            create: ./car
            create: ./car/carModel.js
            create: ./car/carController.js
            create: ./car/carRoutes.js

    You then only have to add router in app.js file and MongoDB connection whit Mongoose. app.js :

    var routes = require('./routes/index');
    var cars = require('./routes/carRoutes');
     ...
    
    app.use('/', routes);
    app.use('/cars', cars);
     ...
     

    Licence

    Copyright (c) 2017 Damien Perrier Licensed under the MIT license.

    Install

    npm i express-mongoose-generator

    DownloadsWeekly Downloads

    26

    Version

    3.1.0

    License

    MIT

    Unpacked Size

    36.1 kB

    Total Files

    15

    Last publish

    Collaborators

    • avatar