/README.md

https://github.com/DamienP33/express-mongoose-generator · Markdown · 262 lines · 227 code · 35 blank · 0 comment · 0 complexity · 8a25ee26ab982c36daabe490cd9e4cb7 MD5 · raw file

  1. [![Build Status](https://travis-ci.org/DamienP33/express-mongoose-generator.svg?branch=master)](https://travis-ci.org/DamienP33/express-mongoose-generator)
  2. # express-mongoose-generator
  3. Its a mongoose model, REST controller and Express router code generator for Express.js 4 application.
  4. ## Installation
  5. ```bash
  6. $ npm install -g express-mongoose-generator
  7. ```
  8. ## Usage
  9. ### Non-Interactive mode
  10. Generates a Mongoose model, a REST controller and Express router :
  11. ```bash
  12. $ mongoose-gen -m car -f carDoor:number,color -r
  13. create: ./models/cardModel.js
  14. create: ./routes/cardRoutes.js
  15. create: ./controllers/cardController.js
  16. ```
  17. ##### Options
  18. - `-m, --model <modelName>` - the model name.
  19. - `-f, --fields <fields>` - the fields (name1:type,name2:type).
  20. - `-r, --rest` - enable generation REST.
  21. - `-t, --tree <tree>` files tree generation grouped by (t)ype or by (m)odule
  22. - `--ts` generate TypeScrypt files
  23. ##### Available types
  24. - string
  25. - number
  26. - date
  27. - boolean
  28. - array
  29. - objectId
  30. ### Interactive mode
  31. Generates a Mongoose model, a REST controller and Express router :
  32. ```bash
  33. $ mongoose-gen
  34. Model Name : car
  35. Available types : string, number, date, boolean, array
  36. Field Name (press <return> to stop adding fields) : door
  37. Field Type [string] : number
  38. Field Name (press <return> to stop adding fields) : color
  39. Field Type [string] :
  40. Field Name (press <return> to stop adding fields) : owner
  41. Field Type [string] : objectId
  42. Reference (model name referred by the objectId field) : User
  43. Field Name (press <return> to stop adding fields) :
  44. Generate Rest (yes/no) ? [yes] :
  45. Files tree generation grouped by Type or by Module (t/m) ? [t] :
  46. create: ./models/carModel.js
  47. create: ./routes/carsRoutes.js
  48. create: ./controllers/carController.js
  49. ```
  50. ## Rendering
  51. ### Model
  52. models/carModel.js :
  53. ```javascript
  54. const mongoose = require('mongoose');
  55. const Schema = mongoose.Schema;
  56. const carSchema = new Schema({
  57. "color" : String,
  58. "door" : Number,
  59. "owner" : {
  60. type: Schema.Types.ObjectId,
  61. ref: 'User'
  62. }
  63. });
  64. module.exports = mongoose.model('car', carSchema);
  65. ```
  66. ### Router
  67. routes/carRoutes.js :
  68. ```javascript
  69. const express = require('express');
  70. const router = express.Router();
  71. const carController = require('../controllers/carController.js');
  72. /*
  73. * GET
  74. */
  75. router.get('/', carController.list);
  76. /*
  77. * GET
  78. */
  79. router.get('/:id', carController.show);
  80. /*
  81. * POST
  82. */
  83. router.post('/', carController.create);
  84. /*
  85. * PUT
  86. */
  87. router.put('/:id', carController.update);
  88. /*
  89. * DELETE
  90. */
  91. router.delete('/:id', carController.remove);
  92. module.exports = router;
  93. ```
  94. ### Controller
  95. controllers/carController.js :
  96. ```javascript
  97. const carModel = require('../models/carModel.js');
  98. /**
  99. * carController.js
  100. *
  101. * @description :: Server-side logic for managing cars.
  102. */
  103. module.exports = {
  104. /**
  105. * carController.list()
  106. */
  107. list: function(req, res) {
  108. carModel.find(function(err, cars){
  109. if(err) {
  110. return res.status(500).json({
  111. message: 'Error getting car.'
  112. });
  113. }
  114. return res.json(cars);
  115. });
  116. },
  117. /**
  118. * carController.show()
  119. */
  120. show: function(req, res) {
  121. const id = req.params.id;
  122. carModel.findOne({_id: id}, function(err, car){
  123. if(err) {
  124. return res.status(500).json({
  125. message: 'Error getting car.'
  126. });
  127. }
  128. if(!car) {
  129. return res.status(404).json({
  130. message: 'No such car'
  131. });
  132. }
  133. return res.json(car);
  134. });
  135. },
  136. /**
  137. * carController.create()
  138. */
  139. create: function(req, res) {
  140. const car = new carModel({
  141. color : req.body.color,
  142. door : req.body.door
  143. });
  144. car.save(function(err, car){
  145. if(err) {
  146. return res.status(500).json({
  147. message: 'Error saving car',
  148. error: err
  149. });
  150. }
  151. return res.json({
  152. message: 'saved',
  153. _id: car._id
  154. });
  155. });
  156. },
  157. /**
  158. * carController.update()
  159. */
  160. update: function(req, res) {
  161. const id = req.params.id;
  162. carModel.findOne({_id: id}, function(err, car){
  163. if(err) {
  164. return res.status(500).json({
  165. message: 'Error saving car',
  166. error: err
  167. });
  168. }
  169. if(!car) {
  170. return res.status(404).json({
  171. message: 'No such car'
  172. });
  173. }
  174. car.color = req.body.color ? req.body.color : car.color;
  175. car.door = req.body.door ? req.body.door : car.door;
  176. car.save(function(err, car){
  177. if(err) {
  178. return res.status(500).json({
  179. message: 'Error getting car.'
  180. });
  181. }
  182. if(!car) {
  183. return res.status(404).json({
  184. message: 'No such car'
  185. });
  186. }
  187. return res.json(car);
  188. });
  189. });
  190. },
  191. /**
  192. * carController.remove()
  193. */
  194. remove: function(req, res) {
  195. const id = req.params.id;
  196. carModel.findByIdAndRemove(id, function(err, car){
  197. if(err) {
  198. return res.status(500).json({
  199. message: 'Error getting car.'
  200. });
  201. }
  202. return res.json(car);
  203. });
  204. }
  205. };
  206. ```
  207. ### With files tree generation by module
  208. ```bash
  209. Files tree generation grouped by Type or by Module (t/m) ? [t] : m
  210. create: ./car
  211. create: ./car/carModel.js
  212. create: ./car/carController.js
  213. create: ./car/carRoutes.js
  214. ```
  215. You then only have to add router in app.js file and MongoDB connection whit Mongoose.
  216. app.js :
  217. ```javascript
  218. const routes = require('./routes/index');
  219. const cars = require('./routes/carRoutes');
  220. ...
  221. app.use('/', routes);
  222. app.use('/cars', cars);
  223. ...
  224. ```
  225. ## Licence
  226. Copyright (c) 2017 Damien Perrier
  227. Licensed under the [MIT license](LICENSE).