sql >> Base de Datos >  >> NoSQL >> MongoDB

Andamios Yeoman, Mongoose y MongoDB

En nuestra publicación anterior, hablamos sobre cómo comenzar con Mongoose y MongoDB. En esta publicación, le mostraremos cómo usar Yeoman y crear un nuevo proyecto Mongoose/Express para MongoDB.

Yeoman es una herramienta de andamiaje que crea proyectos usando Grunt, Bower y Node. Hay momentos en los que terminas cortando y pegando código repetitivo para crear un nuevo proyecto. Esto es precisamente lo que hace Yeoman, pero con un solo comando y algunos generadores impresionantes.

Yeoman usa Grunt como ejecutor de tareas para realizar tareas de ejecución/construcción/prueba. Si desea usar Gulp para lo mismo, puede consultar Slush. Slush también es una herramienta de Scaffolding, pero usa Gulp como ejecutor de tareas.

Primeros pasos con Yeoman

Para facilitarnos la vida, usaremos un generador Super Awesome Yeoman llamado generator-mongoose , que nos ayudará a configurar un nuevo proyecto y nos ayudará en los esquemas de andamiaje.

Este generador utiliza Express.js como servidor, HTML para las plantillas y un toque de Bootstrap CSS para que todo se vea bien.

Creemos una nueva carpeta y llámela yoMongoose. CD en la carpeta y ejecute lo siguiente:

Para instalar Yeoman:

[sudo] npm install -g yo

Para instalar generador-mangoose:

[sudo] npm install -g generator-mongoose

y, finalmente, para montar un nuevo proyecto, ejecute:

yo mongoose

Complete la pregunta como:

[?] Database Name: (myDb) myTestDB
[?] Database Host: (localhost) localhost
[?] Database User: {hit return}
[?] Database Password: {hit return}
[?] Database Port: (27017) 27017
[?] Will you be using heroku? (Y/n)  n

Y Yeoman irá y construirá un nuevo proyecto para usted. Su estructura de carpetas debe consistir en una carpeta /node_modules y una carpeta public/bower_components. Si no ve ninguno de ellos, ejecute npm install y bower install.

Para ejecutar la aplicación, ejecute:

grunt

Esto iniciará el servidor express y abrirá la página de inicio en su navegador predeterminado. La página predeterminada que ve es una lista de rutas configuradas en la aplicación.

Vuelva a la carpeta y veamos un recorrido rápido por la aplicación.

  • configuración /db.js

    Consiste en las configuraciones de la base de datos y algunas opciones con las que puede jugar.

  • modelos /post.js

    Un esquema de ejemplo de una publicación de blog. Todos los demás modelos que vamos a montar con el subgenerador aparecerán aquí.

  • público //h3>

    Consiste en JavaScript y CSS necesarios para la interfaz de usuario.

  • rutas /index.js

    Consiste en la ruta predeterminada que enviará index.htmlpost.js y consta de 5 puntos finales clave que necesitarás para interactuar con la colección de publicaciones.

  • prueba //h3>

    Consiste en la prueba de ruta Post y sus métodos.

  • vistas //h3>

    Consta de todas las plantillas y vistas enviadas al cliente.

Para tener una idea de dónde van las cosas en una aplicación Express modular, recomiendo echar un vistazo a lo siguiente en orden:

config/db.js
models/post.js
routes/post.js
app.js

Una vez que haya terminado, crearemos otro modelo llamado artículos utilizando el subgenerador.

Vuelva a la terminal/solicitud y ejecute:

yo mongoose:schema "article|title:String,excerpt:String,content:String,published:Boolean,created:Date"

El comando anterior creará esos 3 archivos y dará como resultado:

Your creating a schema for article
With the fields: title,excerpt,content,published,created
starting request to schematic for test mock data...
create routes/article.js
create models/article.js
create test/test-article.js

El models/article.js constará de todos los campos enumerados después del símbolo de canalización en el comando. Dulce, ¿verdad?

Para ver el resultado y una lista actualizada de rutas, ejecuta:

grunt

Explore los archivos recién generados y, prácticamente sin esfuerzo, pudimos generar una aplicación Express/Mongoose.

Espero que tenga una comprensión básica de las aplicaciones Scaffolding Express/Mongoose.

Gracias por leer. Comente.
@arvindr21