Una tarea común en el desarrollo web es consumir información desde un archivo JSON o una API. En este tutorial, exploraremos cómo realizar solicitudes HTTP y manejar respuestas JSON en Node.js y Express, facilitando la integración de datos externos en tus aplicaciones.
// Estructura del proyecto
proyecto/
├── data/
│ └── usuarios.json
├── src/
│ └── app.js
├── package.json
└── README.md const express = require('express');
const fs = require('fs').promises;
const path = require('path');
const app = express();
const PORT = process.env.PORT || 3000; Esta función asíncrona lee un archivo JSON desde una ruta especificada y lo convierte en un objeto JavaScript. Si ocurre un error al leer el archivo, lo captura y lo muestra en la consola.
async function leerArchivoJSON(rutaArchivo) {
try {
const rawData = await fs.readFile(rutaArchivo, 'utf8');
return JSON.parse(rawData);
} catch (error) {
console.error('Error al leer el archivo JSON:', error);
throw error;
}
} La función leerArchivoJSON define una ruta /usuarios en una aplicación Express que, al ser accedida, lee un archivo JSON con los datos de los usuarios y los envía como respuesta.
Si ocurre un error al leer el archivo, responde con un mensaje de error y un código de estado 500.
async function leerArchivoJSON(rutaArchivo) {
app.get('/usuarios', async (req, res) => {
try {
const rutaArchivo = path.join(__dirname, '../data/usuarios.json');
const usuarios = await leerArchivoJSON(rutaArchivo);
res.json(usuarios);
} catch (error) {
res.status(500).json({ error: 'Error al obtener usuarios' });
}
});
} La ruta /usuarios/filtro permite filtrar usuarios según los parámetros edad y ciudad proporcionados en la consulta.
Si no se encuentra el archivo o ocurre un error, responde con un mensaje de error y un código 500.
app.get('/usuarios/filtro', async (req, res) => {
try {
const rutaArchivo = path.join(__dirname, '../data/usuarios.json');
const usuarios = await leerArchivoJSON(rutaArchivo);
const { edad, ciudad } = req.query;
const usuariosFiltrados = usuarios.filter(usuario => {
const coincideEdad = !edad || usuario.edad == edad;
const coincideCiudad = !ciudad || usuario.ciudad.toLowerCase() === ciudad.toLowerCase();
return coincideEdad && coincideCiudad;
});
res.json(usuariosFiltrados);
} catch (error) {
res.status(500).json({ error: 'Error al filtrar usuarios' });
}
}); usuarios.json[
{
"id": 1,
"nombre": "urian Viera",
"edad": 30,
"ciudad": "Bogota",
"email": "urian@example.com"
},
{
"id": 2,
"nombre": "Brenda Catalella",
"edad": 25,
"ciudad": "Bogota",
"email": "brenda@example.com"
}
] Este middleware captura errores en la aplicación, los registra en la consola y responde con un mensaje de error y un código 500, indicando que algo salió mal.
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({
mensaje: 'Algo salió mal',
error: err.message
});
}); Inicia el servidor Express en el puerto especificado y muestra un mensaje en la consola indicando que el servidor está corriendo y accesible en la URL correspondiente.
app.listen(PORT, () => {
console.log(`Servidor corriendo en http://localhost:${PORT}`);
});