Express es un framework web rápido y minimalista para Node.js que permite construir aplicaciones web y APIs de manera eficiente. Es una herramienta muy popular en el ecosistema de Node.js debido a su simplicidad y flexibilidad.
Fue creado por TJ Holowaychuk y es actualmente mantenido por la comunidad de desarrolladores de Node.js.
Express.js es ampliamente utilizado en la creación de aplicaciones web y APIs, y es una de las herramientas más populares en el mundo de la programación web.
Algunas características y ventajas de Express incluyen:
- - Enrutamiento: Express proporciona un sistema de enrutamiento que permite definir rutas para diferentes URL y métodos HTTP. Esto facilita la creación de endpoints para manejar solicitudes y respuestas.
- - Middleware: Express utiliza middleware para procesar las solicitudes HTTP. El middleware puede realizar diversas tareas, como el análisis de datos de solicitud, la autenticación, la compresión de respuestas y mucho más. Esto permite agregar funcionalidades adicionales a la aplicación de manera modular y reutilizable.
- - Manejo de vistas: Express permite renderizar vistas utilizando motores de plantillas como EJS o Pug. Esto facilita la generación de HTML dinámico y la presentación de datos en el lado del servidor.
- - Gestión de sesiones y cookies: Express proporciona funciones integradas para manejar sesiones y cookies en las aplicaciones web. Esto permite realizar seguimiento del estado del usuario y almacenar información persistente en la sesión del usuario.
- - Extensibilidad: Express es altamente extensible y se puede combinar con una amplia gama de módulos y middleware de terceros para agregar funcionalidades adicionales a la aplicación.
- - Amplia comunidad y documentación: Express cuenta con una gran comunidad de desarrolladores y una documentación completa que facilita el aprendizaje y la resolución de problemas.
- - API: Express.js es ideal para crear APIs, ya que ofrece una amplia gama de características y herramientas para manejar solicitudes y respuestas.
- - Ligereza: Es un framework ligero y flexible que no añade overhead a las aplicaciones web y APIs.
- - Flexibilidad: Ofrece una amplia gama de características y herramientas que permiten a los desarrolladores crear aplicaciones web y APIs personalizadas.
- - Rapidez: Es rápido y eficiente, lo que permite a los desarrolladores crear aplicaciones web y APIs de manera rápida y eficiente.
- - Comunidad: Tiene una amplia comunidad de desarrolladores que crean y mantienen paquetes y herramientas para el framework.
Ventajas de usar Express.js
- - Aprendizaje: Express.js puede ser un poco difícil de aprender para los desarrolladores que no tienen experiencia previa con Node.js o frameworks de aplicaciones web.
- - Limitaciones: Express.js no es un framework completo, por lo que los desarrolladores pueden necesitar agregar paquetes y herramientas adicionales para completar las funcionalidades que necesitan.
- - Seguridad: Aunque Express.js ofrece soporte para seguridad, los desarrolladores deben ser conscientes de las posibles vulnerabilidades y tomar medidas para proteger sus aplicaciones web y APIs.
Desventajas de usar Express.js
En resumen, Express.js es un framework de Node.js que se utiliza para crear aplicaciones web y APIs. Ofrece una amplia gama de características y herramientas que facilitan el desarrollo de aplicaciones web y APIs, y es ampliamente utilizado en la creación de aplicaciones web y APIs.



Los principales competidores de Express.js en el desarrollo de aplicaciones web son:
- Ruby on Rails: Ruby on Rails es un framework web de código abierto escrito en el lenguaje de programación Ruby. Al igual que Express.js, Ruby on Rails facilita el desarrollo rápido de aplicaciones web con un enfoque en la convención sobre la configuración y el patrón Modelo-Vista-Controlador (MVC).
- Django: Django es un framework web de código abierto escrito en Python. Al igual que Express.js, Django proporciona herramientas y bibliotecas para simplificar el desarrollo de aplicaciones web, como un sistema de enrutamiento, un ORM (Mapeo Objeto-Relacional) y un sistema de plantillas.
- Laravel: Laravel es un framework web de código abierto escrito en PHP. Al igual que Express.js, Laravel se enfoca en facilitar el desarrollo rápido de aplicaciones web con características como enrutamiento, autenticación y gestión de bases de datos.
- ASP.NET Core: ASP.NET Core es un framework web de código abierto desarrollado por Microsoft. Al igual que Express.js, ASP.NET Core proporciona herramientas y bibliotecas para simplificar el desarrollo de aplicaciones web, como un sistema de enrutamiento, un sistema de plantillas y soporte para API RESTful.
Los métodos HTTP
Los métodos HTTP son una parte fundamental del protocolo HTTP (Hypertext Transfer Protocol) y se utilizan para indicar la acción deseada que se debe realizar sobre un recurso específico. Estos métodos también son conocidos como verbos HTTP.
- GET: Se utiliza para solicitar datos de un recurso específico. Por ejemplo, al cargar una página web, el navegador realiza una solicitud GET al servidor para obtener el contenido de la página.
- Petición con cuerpo: No.
Una petición HTTP con cuerpo vacío se refiere a una solicitud que no contiene datos en el cuerpo de la petición. Esto se utiliza comúnmente para solicitar información o realizar operaciones sin necesidad de enviar datos adicionales. - Respuesta con cuerpo: Sí.
Una respuesta HTTP con cuerpo se refiere a una respuesta que contiene datos en el cuerpo de la respuesta. Esto es común cuando se solicita información o se realiza una operación que requiere devolver datos al cliente. - Seguro: Sí.
Cuando se habla de que una petición HTTP es "segura", se refiere a que la petición no modifica el estado del servidor. Esto significa que la petición no tiene efectos secundarios que puedan alterar o dañar los datos almacenados en el servidor. - Idempotente: Sí.
Una petición HTTP idempotente es aquella que puede ser repetida sin producir efectos adversos o cambios no deseados en el sistema. - Cacheable: Sí.
Una respuesta HTTP cacheable se refiere a que el servidor indica que la respuesta puede ser almacenada en un caché por el cliente o un proxy. Esto significa que el cliente o el proxy pueden almacenar la respuesta en su memoria o en un archivo, y luego utilizarla en lugar de solicitarla nuevamente al servidor. - POST: Se utiliza para enviar datos al servidor para su procesamiento. Por ejemplo, al enviar un formulario en una página web, se realiza una solicitud POST para enviar los datos ingresados al servidor.
- Petición con cuerpo: Sí.
- Respuesta con cuerpo: Sí.
- Seguro: Sí.
- Idempotente: No.
- Cacheable: No.
- PUT: Se utiliza para actualizar un recurso existente en el servidor. Por ejemplo, al editar la información de un usuario en una aplicación, se puede utilizar una solicitud PUT para enviar los nuevos datos al servidor y actualizar el usuario correspondiente.
- Petición con cuerpo: Sí.
- Respuesta con cuerpo: Sí.
- Seguro: Sí.
- Idempotente: Si.
- Cacheable: No.
- DELETE: Se utiliza para eliminar un recurso existente en el servidor. Por ejemplo, al eliminar un mensaje en una aplicación de mensajería, se puede utilizar una solicitud DELETE para eliminar el mensaje del servidor.
- Petición con cuerpo: No.
- Respuesta con cuerpo: Sí.
- Seguro: Sí.
- Idempotente: No.
- Cacheable: No.
Algunos de los métodos HTTP más comunes son:
Uso: Consultar recursos del servidor.
Características:
Uso: Guardar recursos en el servidor.
Características:
Uso: Actualizar recursos en el servidor.
Características:
Uso: Eliminar recursos del servidor.
Características:
Crear un servidor con Express
crear una carpeta taller1
npm init o npm init --yes
Nombre del paquete: ¿Qué nombre deseas dar a tu paquete? (Ejemplo: "mi-proyecto") Versión del paquete: ¿Qué versión deseas dar a tu paquete? (Ejemplo: "1.0.0") Autor del paquete: ¿Quién es el autor del paquete? (Ejemplo: "Tu nombre") Descripción del paquete: ¿Qué descripción deseas dar a tu paquete? (Ejemplo: "Este es un paquete para mi proyecto") Licencia del paquete: ¿Qué licencia deseas dar a tu paquete? (Ejemplo: "MIT") Main entry point: ¿Qué archivo deseas que sea el punto de entrada principal del paquete? (Ejemplo: "index.js") Scripts: ¿Qué scripts deseas incluir en el paquete? (Ejemplo: "start": "node index.js") Dependencias: ¿Qué dependencias deseas incluir en el paquete? (Ejemplo: "express": "^4.17.1") Dev dependencias: ¿Qué dependencias de desarrollo deseas incluir en el paquete? (Ejemplo: "nodemon": "^2.0.7") Git repository: ¿Qué repositorio Git deseas incluir en el paquete? (Ejemplo: "https://github.com/tu-usuario/tu-repositorio.git") Estas preguntas ayudan a configurar el archivo package.json con la información necesaria para el paquete.
npm install express
configurar para poder utilizar import colocar esta linea en el archivo package.json despues de "main": "index.js", "type": "module",
Crear un archivo index.js
import express from 'express'; const app = express(); const port = 3000; // Puerto en el que se ejecutará el servidor app.get('/', (req, res) => { res.send('¡Hola, mundo!'); }); app.listen(port, () => { console.log(`Servidor escuchando en el puerto ${port}`); });
para arrancar el servidor node index.js
Etapa 2 control c para salir
Nodemon
que hace nodemon Nodemon es una herramienta que se utiliza en el desarrollo de aplicaciones Node.js. Su función principal es monitorear los cambios en el código fuente de una aplicación y reiniciar automáticamente el servidor cuando se detectan cambios. Esto evita tener que reiniciar manualmente el servidor cada vez que se realiza una modificación en el código, lo que resulta útil y ahorra tiempo durante el proceso de desarrollo. instalar una dependencia para no tener bajar y cargar el servodor en cada cambio npm i nodemon -D // el -D es para decir que solo sera utilizada en desarrollo ajustar el script en el package.json camiar "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, por "scripts": { "dev": "nodemon index.js" }, ahora se puede ejecutar npm run dev
Manejar los Metodos Http
Descargar EjercicioMetotos para categorias
// categorias app.get("/categorias", (req, res) => { const data = readData(); res.json(data.categorias); }); app.get("/categorias/:id", (req, res) => { const data = readData(); const id = parseInt(req.params.id); console.log(id); const categoria = data.categorias.find((categoria) => categoria.id == id); res.json(categoria); }); //insertar app.post("/categorias", (req, res) => { const data = readData(); const body = req.body; const newCategoria = { 'id': data.categorias.length + 1, ...body, }; data.categorias.push(newCategoria); writeData(data); res.json(newCategoria); }); // actualizar app.put("/categorias/:id", (req, res) => { const data = readData(); const body = req.body; const id = parseInt(req.params.id); const categoriaIndex = data.categorias.findIndex((categoria) => categoria.id === id); data.categorias[categoriaIndex] = { ...data.categorias[categoriaIndex], ...body, }; writeData(data); res.json({ message: "La Categoria fue actualizada con exito" }); }); //eliminar app.delete("/categorias/:id", (req, res) => { const data = readData(); const id = parseInt(req.params.id); const categoriaIndex = data.categorias.findIndex((categoria) => categoria.id === id); data.productos.splice(categoriaIndex, 1); writeData(data); res.json({ message: "Categoria elminada con exito" }); });
Corregir problemas de CORS
app.use((req, res, next) => { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); next(); });