update tutorial que node framework ejemplos actualizar node.js mongodb express sequelize.js mean-stack

node.js - tutorial - Desea ser muy claro sobre la estructura de la aplicación NodeJS(pila de JavaScript completa)



node js tutorial pdf (1)

Muy bien, esta es una pregunta bastante amplia y definitivamente no soy un experto, pero haré lo mejor aquí.

TL; DR

  • routes son controladores que indican qué lógica ejecutar cuando un usuario navega por su navegador a una ruta determinada dentro de su aplicación, incluidas las vistas que se deben representar y los datos que se enviarán a esas vistas.
  • models son solo eso: modelos de datos dentro de su aplicación
  • module.exports = le dice a un archivo qué es exactamente lo que "exporta", es lo que el código necesita para ser ejecutado o accesible desde su archivo de aplicación principal.
  • require(..) incluye un módulo. Puede configurar esto en una variable para que pueda llamar a las funciones del módulo más tarde, o simplemente ejecutar una función si eso es todo lo que module.exports devuelve.

La combinación de estas técnicas puede ayudarlo a definir un marco sólido para cualquiera de sus aplicaciones.

Respuesta larga

Express proporciona un marco sólido para estructurar su aplicación Node.js. Node es completamente independiente de Express, pero debido a lo popular que es Express, prácticamente van de la mano. Una vez instalado, Express se puede usar para generar un proyecto web de andamio (con opciones) para que pueda construir encima si lo desea.

Controladores

Un proyecto generado creará /routes/index.js , que (si comprende MVC) es esencialmente su controlador principal. Una ruta en express se escribe así:

app.get(''/path'', function(req, res, next){ .. } );

Vamos a desglosar eso: a nuestra variable de aplicación (aplicación) se le está diciendo que en una solicitud GET a ''/path'' para ejecutar una función de devolución de llamada anónima con req, res, next variables (solicitud, respuesta, devolución de llamada respectivamente). Me parece útil pensar en esto como un controlador de eventos personalizado.

Es importante señalar en este punto que también podríamos llamar a app.post con la misma sintaxis para las publicaciones en una URL en lugar de get.

Dentro de nuestra devolución de llamada anónima, manejamos cualquier información entrante y renderizamos una vista para el usuario. Aquí es donde termina la mayor parte de mi lógica empresarial, por lo que tiene sentido NO usar funciones anónimas aquí. Aquí hay un ejemplo de devolución de llamada básica que solo muestra una página principal:

app.get(''/'', function(req, res, next){ //some business logic res.render(''views/home''); });

Cuando el usuario intenta OBTENER la ruta de índice de nuestra aplicación ( / ), simplemente renderizamos nuestra vista de home que, desde la raíz de nuestro proyecto, se almacena en una carpeta de views .

Pero, ¿y si queremos modularizar esto para que no declaremos todas nuestras rutas en nuestra app.js o server.js ?

Usamos module.exports = .. en nuestros módulos para decirle a nuestro servidor qué incluir exactamente. En mi controlador, exporto una sola función que toma la aplicación como argumento y la usa para definir nuestras rutas de la siguiente manera:

Controladores / User.js

module.exports = function(app){ app.get(''/users'', function(req, res){ var users = req.db.collection(''users'').find(); if (!users) { console.log("no users found"); res.redirect(''/''); } else { res.render(''users/index'', {users : users}); } }); };

No se preocupe por el código req.db , adjunto la base de datos a la solicitud en mi aplicación, pero eso no se hace de forma predeterminada. Simplemente entienda que estoy obteniendo una lista de ''usuarios'' aquí, y redirigiendo al usuario al índice de mi aplicación, si no los hay.

Modelos

Mongoose nos proporciona una excelente interfaz para escribir modelos. Con mangosta, escribir modelos es un proceso de tres pasos:

  • Definir un esquema
  • Definir la lógica del modelo
  • Generar y exportar el modelo

Aquí hay un ejemplo de un modelo de User :

Modelos / User.js

var mongoose = require(''mongoose''), userSchema = new mongoose.Schema({ name: { type: String, required: true }, joinDate: {type: Date, default: date.now } }), User = mongoose.model(''user'', userSchema); module.exports = user;

Aplicación de servidor

module.exports se usa para ayudarnos a definir cierta modularidad en nuestra base de código. Cuando ejecutamos una aplicación de nodo, finalmente estamos ejecutando un único archivo JavaScript (ya ha visto ese archivo con server.js o app.js ).

Para evitar que este archivo sea demasiado grande con varios modelos y rutas, utilizamos require(module) para incluir código de otros archivos JS. module en nuestro caso sería una ruta de acceso al módulo que queremos requerir. Si tiene la siguiente estructura de documento:

| Controllers - User.js | Models - User.js | Views app.js

Para incluir su controlador de usuario desde app.js , debería escribir: require(''./Controllers/User'') . Dado que nuestros módulos de controlador simplemente exportan funciones, podemos llamar a esa función inmediatamente después de nuestra declaración de requisitos simplemente añadiendo paréntesis al final (con los parámetros que sean necesarios). Incluyendo mis controladores parece así:

require(''./Controllers/User'')(app)

Estoy pasando la aplicación real, porque mi módulo (a continuación) simplemente exporta una función que agrega lógica empresarial a las rutas de mi aplicación. Esto solo necesita ser llamado y nunca usado, así que no capturo mi controlador como una variable para llamar a los métodos más tarde.

Incluir modelos es un poco diferente, ya que es posible que deseemos realizar alguna operación que nuestro modelo defina. Podemos hacer esto cambiando un poco nuestro código de requerimiento:

var User = require(''./Models/User'');

Ahora podemos llamar a los métodos de nuestro modelo de Usuario siempre que sea. Mongoose nos da mucha funcionalidad básica gratis:

User.find({}, function(err, users){ .. });

La función anterior buscará a todos nuestros usuarios y luego ejecutará una función anónima con un err potencial (es nulo si no hay problemas) y luego una lista de nuestros usuarios en formato JSON. Bastante ingenioso.

Combinando todos estos conceptos es cómo se crea una aplicación web básica usando Express y Node.js. Por favor, hágamelo saber en los comentarios si hay algo que pueda aclarar sobre cómo uso Express. Este es un conocimiento muy superficial, y sugiero profundizar en la documentación y buscar complementos para ampliar las capacidades de sus aplicaciones. ¡Buena suerte!

Me gustaría conocer la estructura de una aplicación NodeJS típica, porque cuanto más leo y veo los proyectos, más me confundo, específicamente para preguntas como estas: (o más cuando actualizo esta pregunta).

  1. Tome la pila MEAN por ejemplo, por lo que sé, NodeJS y Express se encargan del servidor
    parte, proporcionando la interfaz del servidor, etc. MongoDB y Angular es bastante sencillo.

    ¿Pero a dónde debe ir la lógica de negocios ? Di si tengo un controller.js que contiene una función,
    y el archivo route.js enlaza la solicitud con esta función de controlador. Mi pregunta es bajo qué módulo pertenecen estos archivos / se ejecuta bajo (The Express o NodeJS?)

  2. ¿Dónde está el punto de partida de una aplicación NodeJS? Say index.php es el punto de partida de una aplicación php, pero ¿dónde está la aplicación NodeJS? Puedo ver que todos los proyectos de nodejs tienen un archivo llamado server.js o app.js, etc. (contiene algo como module.exports = app; ) Pero, ¿cómo puede saber NodeJS qué archivo encontrar y ejecutar?

Soy un principiante en NodeJS, express, sequelize.js / mongoose, jade / ejs, pero quiero comenzar con un proyecto nodejs. ¿Podrían ustedes, por favor, elaborar la función real que proporciona cada módulo y una introducción general de la estructura típica para una aplicación nodejs apilada js completa? ¡Gracias por adelantado!