- Es un middleware usado para analizar el cuerpo de las solicitudes HTTP (por ejemplo, datos enviados por formularios o JSON).
-
Aunque anteriormente era una dependencia separada, ahora Express incluye
funciones similares (
express.json()
yexpress.urlencoded()
).
¿Para qué sirve?
- Analizar JSON: Convierte los cuerpos de las solicitudes con datos en formato JSON en objetos JavaScript que puedes manejar fácilmente en tu servidor.
- Analizar datos codificados en URL (URL-encoded): Traduce los datos enviados en formularios HTML al formato adecuado para trabajar con ellos en tu backend.
- Soporte para otros formatos: Puede configurarse para manejar formatos como texto plano o datos binarios, aunque esto es menos común.
Estructura básica con Body-Parser:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
// Configurar el Body-Parser para solicitudes JSON y URL-encoded
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/datos', (req, res) => {
console.log(req.body); // Acceder al cuerpo de la solicitud
res.send('Datos recibidos');
});
app.listen(3000, () => {
console.log('Servidor funcionando en el puerto 3000');
});
Aunque las versiones más recientes de Express ya incluyen funcionalidades similares integradas, Body-Parser sigue siendo útil en proyectos más antiguos o cuando se necesita personalización adicional.
Una estructura más avanzada utilizando Body-Parser para manejar diferentes tipos de solicitudes en una aplicación de Node.js . Este ejemplo combina validaciones, manejo de errores, modularización, y soporte para varios tipos de datos.
Proyecto/
├── controllers/
│ ├── usuariosController.js
├── middlewares/
│ ├── errorHandler.js
│ ├── validarDatos.js
├── routes/
│ ├── usuariosRoutes.js
├── server.js
Controlador: usuariosController.js
Define la lógica para manejar las solicitudes relacionadas con los usuarios.
exports.crearUsuario = (req, res) => {
const { nombre, correo } = req.body;
res.json({ mensaje: `Usuario creado: ${nombre} (${correo})` });
};
exports.obtenerUsuarios = (req, res) => {
res.json({ mensaje: 'Lista de usuarios' });
};
Middleware para validación: validarDatos.js
Middleware personalizado para validar datos de entrada.
exports.validarUsuario = (req, res, next) => {
const { nombre, correo } = req.body;
if (!nombre || !correo) {
return res.status(400).json({ error: 'Nombre y correo son obligatorios' });
}
next();
};
Middleware para errores: errorHandler.js
Centraliza el manejo de errores en toda la aplicación.
exports.errorHandler = (err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: 'Ocurrió un error en el servidor' });
};
Rutas: usuariosRoutes.js
Configura las rutas y asocia los controladores y middlewares.
const express = require('express');
const { crearUsuario, obtenerUsuarios } = require('../controllers/usuariosController');
const { validarUsuario } = require('../middlewares/validarDatos');
const router = express.Router();
router.get('/', obtenerUsuarios);
router.post('/crear', validarUsuario, crearUsuario);
module.exports = router;
Servidor principal: server.js
Archivo principal donde se configuran los middlewares globales y se inician las rutas.
const express = require('express');
const bodyParser = require('body-parser');
const usuariosRoutes = require('./routes/usuariosRoutes');
const { errorHandler } = require('./middlewares/errorHandler');
const app = express();
// Middlewares globales
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// Rutas
app.use('/usuarios', usuariosRoutes);
// Middleware para manejo de errores
app.use(errorHandler);
// Iniciar servidor
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Servidor funcionando en el puerto ${PORT}`);
});
¿Qué hace esta estructura avanzada?
- Modularización: Divide el código en diferentes carpetas y archivos para mejorar la organización.
- Middleware personalizado: Valida datos de entrada y maneja errores.
- Controladores dedicados: Define claramente la lógica para las diferentes operaciones.
- Manejabilidad: Facilita la escalabilidad de tu aplicación para agregar más funcionalidades.