/README.md
https://github.com/DamienP33/express-mongoose-generator · Markdown · 262 lines · 227 code · 35 blank · 0 comment · 0 complexity · 8a25ee26ab982c36daabe490cd9e4cb7 MD5 · raw file
- [](https://travis-ci.org/DamienP33/express-mongoose-generator)
- # express-mongoose-generator
- It’s a mongoose model, REST controller and Express router code generator for Express.js 4 application.
- ## Installation
- ```bash
- $ npm install -g express-mongoose-generator
- ```
- ## Usage
- ### Non-Interactive mode
- Generates a Mongoose model, a REST controller and Express router :
- ```bash
- $ 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 :
- ```bash
- $ 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 :
- ```javascript
- 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);
- ```
- ### Router
- routes/carRoutes.js :
- ```javascript
- 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;
- ```
- ### Controller
- controllers/carController.js :
- ```javascript
- 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);
- });
- }
- };
- ```
- ### With files tree generation by module
- ```bash
- 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 :
- ```javascript
- const routes = require('./routes/index');
- const cars = require('./routes/carRoutes');
- ...
- app.use('/', routes);
- app.use('/cars', cars);
- ...
-
- ```
- ## Licence
- Copyright (c) 2017 Damien Perrier
- Licensed under the [MIT license](LICENSE).