I’m sorry, I don’t speak English
Tengo una aplicación, front en Vue 3 con quasar, y back con Express, soy un poco novato, en node y estas tecnologías modernas.
Mi aplicación debe mantener actualizada una base de datos a partir de ficheros de texto plano con sentencias slq de actualización de mis tablas. Estos ficheros se suben y la api debería procesarlos y actualizar la base de datos. Esto funciona correctamente en el local, pero al subirlo a render todo aparentemente funciona correctamente pero al revisar la base de datos no se actualiza.
comparto un poco de código de mi api:
import express from 'express';
import path from 'path';
import fs from 'fs/promises';
import { IncomingForm } from 'formidable';
import AdmZip from 'adm-zip';
import connection from '../config/db.js';
import { fileURLToPath } from 'url';
import { authenticateToken } from '../middlewares/middleware.js';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const router = express.Router();
const uploadDir = path.join(__dirname, 'uploads');
fs.mkdir(uploadDir, { recursive: true });
router.post('/upload', authenticateToken, (req, res) => {
console.log('Petición de subida recibida.');
const form = new IncomingForm();
form.uploadDir = uploadDir;
form.keepExtensions = true;
form.parse(req, async (err, fields, files) => {
if (err) {
console.error('Error al procesar el archivo:', err);
return res.status(500).send('Error al procesar el archivo.');
}
console.log('Archivo recibido y parseado.');
const fileArray = files['pruebasql.zip'];
if (!fileArray || fileArray.length === 0) {
console.error('Archivo no encontrado en la solicitud.');
return res.status(400).send('Archivo no encontrado.');
}
const file = fileArray[0];
const filePath = file.filepath;
const targetPath = path.join(uploadDir, 'extracted');
try {
const zip = new AdmZip(filePath);
const password = '123'; // Define la contraseña aquí
await fs.mkdir(targetPath, { recursive: true });
// Extraer archivos
zip.extractAllTo(targetPath, true, false, password);
const sqlFileName = 'pruebasql.txt'; // Nombre del fichero que viene dentro del zip
const sqlFilePath = path.join(targetPath, sqlFileName);
console.log(`Extrayendo archivo SQL desde ${sqlFilePath}`);
const sqlData = await fs.readFile(sqlFilePath, 'utf8');
const statements = sqlData.split(';').map(statement => statement.trim()).filter(statement => statement);
console.log('Sentencias SQL cargadas y preparadas para su ejecución.');
const client = await connection.connect();
console.log('Conexión a la base de datos establecida.');
try {
for (const statement of statements) {
console.log(`Ejecutando sentencia SQL: ${statement}`);
await client.query(statement); // Ejecutar directamente sin sanitizar
}
client.release();
console.log('Todas las sentencias SQL ejecutadas correctamente.');
// Eliminar los archivos después de procesarlos
await fs.rm(filePath);
await fs.rm(targetPath, { recursive: true, force: true });
console.log('Archivos eliminados después del procesamiento.');
res.send('Archivo subido y procesado con éxito.');
} catch (err) {
client.release();
console.error('Error al ejecutar las sentencias SQL:', err);
res.status(500).send('Error al ejecutar las sentencias SQL.');
}
} catch (err) {
console.error('Error al procesar el archivo:', err);
res.status(500).send('Error al procesar el archivo.');
}
});
});
export default router;
render no me deja ni defenderme pq no me muestra los console.log, he intentado muchas cosa pero ya se me acabaron las balas. Gracias de antemanos y espero puedan ayudarme un poco.
Saludos