#

  Es un entorno de ejecución de JavaScript en el lado del servidor que permite a los desarrolladores crear aplicaciones web y de red altamente escalables y eficientes. Aquí tienes algunos conceptos básicos

conceptos importantes

Controlar versiones de Node


HTTP

estados


🔻Entorno de Ejecución

Ejecución de JavaScript en servidor.

Node.js proporciona un entorno de tiempo de ejecución para JavaScript fuera del navegador, lo que significa que puedes ejecutar JavaScript en el servidor.


🔻Event-Driven y Non-Blocking I/O

Programación orientada a eventos, E/S no bloqueante.

Node.js utiliza un modelo de programación orientado a eventos y operaciones de entrada/salida no bloqueante, lo que permite manejar múltiples solicitudes simultáneamente sin bloquear el hilo de ejecución.


🔻Módulos

División de la aplicación en módulos reutilizables.

Node.js utiliza un sistema de módulos que permite la modularidad en el código. Puedes dividir tu aplicación en archivos pequeños y reutilizables, y luego importarlos según sea necesario en otros archivos.


🔻npm: Node Package Manager

Gestión de paquetes y dependencias con npm.

Es el sistema de gestión de paquetes de Node.js que te permite instalar, compartir y gestionar dependencias de proyectos fácilmente. npm es una de las mayores colecciones de paquetes de código abierto del mundo.


🔻API de E/S Asíncrona

Operaciones de entrada/salida asíncronas.

Node.js proporciona una amplia gama de APIs para realizar operaciones de entrada/salida de manera asíncrona, lo que significa que las operaciones pueden continuar mientras otras operaciones están en curso, sin bloquear el hilo de ejecución.


🔻Single-Threaded pero Event-Loop

Modelo de event-loop para concurrencia eficiente.

Node.js opera en un solo hilo, pero utiliza un modelo de event-loop que permite manejar múltiples solicitudes simultáneamente. Esto hace que sea eficiente para aplicaciones de red en tiempo real.


🔻Escalabilidad

Altamente escalable para aplicaciones de red.

Gracias a su modelo de E/S no bloqueante y su capacidad para manejar muchas conexiones simultáneas, Node.js es altamente escalable y adecuado para aplicaciones que requieren un alto rendimiento y concurrencia.


🔻Desarrollo de API y Aplicaciones Web

Desarrollo de APIs, servidores web, aplicaciones en tiempo real.

Node.js es comúnmente utilizado para desarrollar APIs RESTful, servidores web y aplicaciones de una sola página (SPA), así como aplicaciones en tiempo real como chat en línea, juegos multijugador y aplicaciones de transmisión de datos.


🔻Frameworks y Bibliotecas

Utilización de frameworks y bibliotecas populares.

Existen muchos frameworks y bibliotecas populares construidos sobre Node.js, como Express.js, Socket.io, Hapi.js, Koa.js, entre otros, que simplifican el desarrollo web y la creación de APIs.


🔻Streaming de Datos

Eficiente para streaming de datos en tiempo real.

Node.js es excelente para el manejo de datos en tiempo real, como el streaming de archivos o la transmisión de video, debido a su capacidad para manejar la E/S de manera eficiente.


🔻Middleware

Funciones que manejan solicitudes HTTP intermedias.

Son funciones intermedias que se ejecutan entre la recepción de una solicitud HTTP y el envío de una respuesta. En el contexto de Node.js y frameworks como Express.js, los middlewares pueden realizar tareas como el análisis del cuerpo de la solicitud, la autenticación, la gestión de sesiones, el registro de solicitudes, entre otros.


🔻Callback

Funciones pasadas como argumentos a otras funciones.

En JavaScript, un callback es una función que se pasa como argumento a otra función y se ejecuta después de que la función principal ha terminado de ejecutarse. Son comunes en Node.js para manejar operaciones asíncronas como lectura de archivos, solicitudes de red o consultas a bases de datos.


🔻Promesa

Manejo asincrónico de operaciones, evita “callback hell”.

on objetos que representan el éxito o el fracaso eventual de una operación asíncrona y su valor resultante. Las promesas en Node.js proporcionan una forma más limpia y estructurada de manejar operaciones asincrónicas, evitando el “callback hell” y permitiendo un mejor manejo de errores.


🔻Async/Await

Sintaxis para trabajar con promesas de manera síncrona.

Es una sintaxis de JavaScript para trabajar con promesas de manera síncrona, haciéndolas parecer más como código síncrono. Las funciones marcadas con async devuelven automáticamente una promesa y la palabra clave await pausa la ejecución de la función hasta que la promesa se resuelve o se rechaza.


🔻EventEmitted

Clase para emitir y escuchar eventos.

Es una clase en Node.js que permite la implementación de un patrón de diseño de publicación/suscripción para la gestión de eventos. Los objetos EventEmitter pueden emitir eventos y los oyentes pueden suscribirse a esos eventos para ejecutar código específico cuando se emiten.


🔻Buffed

Almacén temporal de datos binarios en memoria.

Es un área de memoria que se utiliza para almacenar datos binarios de longitud fija. Los buffers son comúnmente utilizados en Node.js para trabajar con datos binarios como archivos, imágenes o datos de red.


🔻Stream

Flujo de datos que se procesa incrementalmente.

Es una abstracción en Node.js para leer o escribir datos de manera secuencial. Los streams permiten procesar grandes volúmenes de datos de manera eficiente, ya que no es necesario cargar todo el contenido en memoria de una vez.


🔻Cluste

Módulo para crear procesos hijos en paralelo.

El módulo Cluster en Node.js permite crear múltiples procesos hijos que comparten el mismo puerto del servidor. Esto mejora el rendimiento y la escalabilidad al permitir que un servidor Node.js utilice todos los núcleos de la CPU de manera eficiente.


🔻N-AP

Interfaz de aplicación nativa para extensiones C++.

Es una interfaz de aplicación nativa en Node.js que proporciona una forma estable de escribir extensiones en C++ que sean compatibles con múltiples versiones de Node.js. Esto facilita la creación de módulos nativos para Node.js que no dependen de la versión específica de Node.js.


🔻Debugged

Herramientas para depurar código Node.js.

Debugger: Node.js ofrece herramientas integradas de depuración que permiten inspeccionar el estado de ejecución de una aplicación, establecer puntos de interrupción, rastrear variables y ejecutar el código paso a paso para identificar y corregir errores.

COMANDOS

`node nomArch`
`node -V`
`node --inspect nomArch`
`node .<comando> `👉 es la consola en Node.js

Comandos de NPM (Node Package Manager)

`npm init`
`npm i/install`
`npm i/install <package>`
`npm i/install <package> --save-dev`
`npm un/uninstall <package>`
`npm run <script>`
`npm ls/list`
`npm outdate`
`npm update <package>`
`npm cache clean --forc`

Paquete server

`npm -i --g serve`

Comandos de NPX

`npx <command>`

🔻11ty/eleventy

 npx @11ty/eleventy
 npx run build
    "build": "npx @11ty/eleventy",
 npx start
    "start": "npx @11ty/eleventy --serve"

Comandos de Control de Versiones

frameworks Exprexx

Express es uno de los frameworks más populares para construir aplicaciones web con Node.js.

Métodos: Routing / Middleware / Aplicación / Respuesta

Métodos de Routing

Estos métodos se utilizan para definir las rutas y manejar las solicitudes HTTP.

🔻app.get(path, callback)

Maneja solicitudes HTTP GET. Se usa para OBTENER datos del servidor.

app.get("/ruta", (req, res) => {
  res.send("Respuesta a una solicitud GET");
});

🔻app.post(path, callback)

Maneja solicitudes HTTP POST. Se usa para ENVIAR datos al servidor.

app.post("/ruta", (req, res) => {
  res.send("Respuesta a una solicitud POST");
});

🔻app.put(path, callback)

Maneja solicitudes HTTP PUT. Se usa para ACTUALIZAR datos en el servidor.

app.put("/ruta", (req, res) => {
  res.send("Respuesta a una solicitud PUT");
});

🔻app.delete(path, callback)

Maneja solicitudes HTTP DELETE. Se usa para ELIMINAR datos del servidor.

app.delete("/ruta", (req, res) => {
  res.send("Respuesta a una solicitud DELETE");
});

🔻app.patch(path, callback)

Maneja solicitudes HTTP PATCH. Se usa para realizar ACTUALIZACIONES * PARCIALES de los datos.

app.patch("/ruta", (req, res) => {
  res.send("Respuesta a una solicitud PATCH");
});

🔻app.all(path, callback)

Maneja todas las solicitudes HTTP para UNA ruta específica.

app.all("/ruta", (req, res) => {
  res.send("Respuesta a cualquier tipo de solicitud HTTP");
});

Métodos de Middleware

Estos métodos se usan para ejecutar código antes de llegar a la ruta específica.

app.use("/ruta", (req, res, next) => {
  console.log("Middleware ejecutado");
  next();
});
app.use((req, res, next) => {
  console.log("Middleware ejecutado para todas las rutas");
  next();
});

Métodos de Aplicación

Estos métodos se usan para configurar y manejar la aplicación.

app.listen(3000, () => {
  console.log("Servidor escuchando en el puerto 3000");
});
app.set("view engine", "ejs");
const engine = app.get("view engine");

Métodos de Respuesta

Estos métodos se usan para enviar respuestas al cliente.

🔻res.send(data)

Envía una respuesta de varios tipos al cliente.

res.send("Hola, mundo");

🔻res.json(data)?

Envía una respuesta en formato JSON.

res.json({ mensaje: "Hola, mundo" });

🔻res.status(code)

Establece el código de estado HTTP para la respuesta.

res.status(404).send("No encontrado");

🔻res.redirect(url)

Redirige la solicitud a una URL diferente.

res.redirect("/nueva-ruta");

🔻res.render(view, data)

Renderiza una vista utilizando el motor de plantillas configurado.

res.render("index", { titulo: "Página de Inicio" });

Estos métodos son fundamentales para trabajar con Express y permiten manejar y responder a las solicitudes HTTP de manera efectiva.