Aquí tienes una implementación avanzada para endpoints en el backend que
garantizan la exportación de datos en múltiples formatos como
JSON, XML, CSV, YAML, HTML, y
texto plano.
Backend Mejorado (Node.js con Express)
const express = require("express");
const fs = require("fs");
const path = require("path");
const cors = require("cors");
const { parse } = require("json2csv"); // Biblioteca para convertir JSON a CSV
const YAML = require("yaml"); // Biblioteca para convertir JSON a YAML
const app = express();
app.use(cors());
app.use(express.json());
// Ruta a los datos (modifica según el archivo que tengas)
const htdocsPath = path.join(__dirname, "../htdocs");
const dataFile = path.join(htdocsPath, "datos.json");
// Función para cargar datos desde un archivo JSON
function loadData() {
if (!fs.existsSync(dataFile)) {
throw new Error("Archivo de datos no encontrado.");
}
return JSON.parse(fs.readFileSync(dataFile, "utf-8"));
}
// Endpoint para exportar en formato JSON
app.get("/export/json", (req, res) => {
try {
const data = loadData();
res.json(data);
} catch (error) {
res.status(500).send(`Error al exportar JSON: ${error.message}`);
}
});
// Endpoint para exportar en formato XML
app.get("/export/xml", (req, res) => {
try {
const data = loadData();
let xml = '<?xml version="1.0" encoding="UTF-8"?>\n<registroUsuarios>\n';
data.forEach(item => {
xml += " <usuario>\n";
for (let key in item) {
xml += ` <${key}>${item[key]}</${key}>\n`;
}
xml += " </usuario>\n";
});
xml += "</registroUsuarios>";
res.set("Content-Type", "application/xml");
res.send(xml);
} catch (error) {
res.status(500).send(`Error al exportar XML: ${error.message}`);
}
});
// Endpoint para exportar en formato CSV
app.get("/export/csv", (req, res) => {
try {
const data = loadData();
const csv = parse(data); // Convierte JSON a CSV usando json2csv
res.set("Content-Type", "text/csv");
res.send(csv);
} catch (error) {
res.status(500).send(`Error al exportar CSV: ${error.message}`);
}
});
// Endpoint para exportar en formato YAML
app.get("/export/yaml", (req, res) => {
try {
const data = loadData();
const yaml = YAML.stringify(data); // Convierte JSON a YAML usando yaml
res.set("Content-Type", "text/yaml");
res.send(yaml);
} catch (error) {
res.status(500).send(`Error al exportar YAML: ${error.message}`);
}
});
// Endpoint para exportar en formato HTML
app.get("/export/html", (req, res) => {
try {
const data = loadData();
let html = "<table border='1'>\n<tr>";
const keys = Object.keys(data[0]); // Columnas
keys.forEach(key => html += `<th>${key}</th>`);
html += "</tr>\n";
data.forEach(item => {
html += "<tr>";
keys.forEach(key => html += `<td>${item[key]}</td>`);
html += "</tr>\n";
});
html += "</table>";
res.set("Content-Type", "text/html");
res.send(html);
} catch (error) {
res.status(500).send(`Error al exportar HTML: ${error.message}`);
}
});
// Endpoint para exportar en texto plano
app.get("/export/plaintext", (req, res) => {
try {
const data = loadData();
let plainText = "";
data.forEach(item => {
for (let key in item) {
plainText += `${key}: ${item[key]}\n`;
}
plainText += "\n";
});
res.set("Content-Type", "text/plain");
res.send(plainText);
} catch (error) {
res.status(500).send(`Error al exportar texto plano: ${error.message}`);
}
});
// Configurar servidor
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Servidor corriendo en http://localhost:${PORT}`);
});
Descripción de los endpoints
-
JSON (
/export/json
):- Devuelve los datos como un objeto JSON.
- Es ideal para integraciones entre aplicaciones.
-
XML (
/export/xml
):- Genera un archivo XML con los datos estructurados.
- Útil para sistemas que utilizan este formato como estándar.
-
CSV (
/export/csv
):- Convierte los datos a formato CSV (valores separados por comas).
- Compatible con programas como Excel o Google Sheets.
-
YAML (
/export/yaml
):- Convierte los datos a YAML, que es legible para humanos y se usa frecuentemente en configuraciones.
-
Necesita la biblioteca
yaml
(instalar connpm install yaml
).
-
HTML (
/export/html
):- Formatea los datos en una tabla HTML.
- Útil para mostrarlos directamente en una página web.
-
Texto plano (
/export/plaintext
):- Presenta los datos como texto simple, con cada clave-valor en una línea.
- Ideal para visualización rápida en terminales o logs.
Bibliotecas utilizadas
-
json2csv
: Convierte objetos JSON a formato CSV. yaml
: Convierte objetos JSON a YAML.
Pruebas
-
Arranca el servidor: Ejecuta el backend con
node app.js
. -
Accede a los endpoints: Ve a
http://localhost:3000/export/json
,/export/xml
,/export/csv
, etc., según el formato deseado. - Verifica la salida: Abre las URLs en el navegador o utiliza herramientas como Postman.
Esta solución garantiza que los datos se puedan exportar en múltiples formatos directamente desde el backend.
....
Tags
Backend