It’s a mongoose model, REST controller and Express router code generator for Express.js 4 application.
$ cd express-mongoose-generator
$ npm install -g
$ npm r -g express-mongoose-generator
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
-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
- string
- number
- date
- boolean
- array
- objectId
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
models/carModel.js :
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const carSchema = new Schema({
"color" : String,
"door" : Number,
"owner" : {
type: Schema.Types.ObjectId,
ref: 'User'
}
});
module.exports = mongoose.model('car', carSchema);
routes/carRoutes.js :
const express = require('express');
const router = express.Router();
const 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;
controllers/carController.js :
const 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) {
const 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) {
const 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) {
const 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) {
const 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);
});
}
};
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 :
const routes = require('./routes/index');
const cars = require('./routes/carRoutes');
...
app.use('/', routes);
app.use('/cars', cars);
...
Copyright (c) 2017 Damien Perrier Licensed under the MIT license.