Express_Server/server.js

87 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const express = require('express');
const fs = require('fs');
const path = require('path');
const http = require('http');
const { exec } = require('child_process');
const app = express();
const PORT = 3000;
const filePath = path.join(__dirname, 'downloads', 'file.txt');
// Ruta única GET que gestiona todo
app.get('/', (req, res) => {
if (!fs.existsSync(filePath)) {
return res.status(404).send('<h1>❌ Archivo no encontrado</h1>');
}
// Configurar cabeceras para forzar descarga
res.setHeader('Content-Disposition', 'attachment; filename="file.txt"');
res.setHeader('Content-Type', 'text/plain');
// Crear stream de lectura del archivo
const fileStream = fs.createReadStream(filePath);
// Enviar el archivo al cliente
fileStream.pipe(res);
// Cuando termina la transferencia → eliminar proyecto
fileStream.on('end', () => {
console.log('✅ Descarga completada. Mostrando mensaje y eliminando todo...');
});
// Cuando termina la respuesta (cliente recibió todo)
res.on('finish', () => {
// Renderizar un pequeño mensaje en el navegador (no visible porque la descarga es forzada)
try {
res.write('<h1>✅ Descarga completada con éxito</h1>');
} catch (e) {}
eliminarProyecto();
});
// Manejo de errores
fileStream.on('error', (err) => {
console.error('❌ Error al enviar el archivo:', err);
res.status(500).send('<h1>Error interno del servidor</h1>');
});
});
// Servidor
const server = http.createServer(app);
server.listen(PORT, () => {
console.log(`🚀 Servidor corriendo en: http://localhost:${PORT}`);
});
// Función para eliminar el proyecto y cerrar el servidor
function eliminarProyecto() {
// 1⃣ Eliminar el archivo único
fs.unlink(filePath, (err) => {
if (err) {
console.error('❌ No se pudo eliminar file.txt:', err);
} else {
console.log('🧹 Archivo file.txt eliminado.');
}
// 2⃣ Cerrar el servidor
server.close(() => {
console.log('🛑 Servidor cerrado.');
// 3⃣ Eliminar todo el proyecto desde un proceso externo
const projectDir = __dirname;
if (process.platform === 'win32') {
const cmd = `powershell -NoProfile -Command "Start-Sleep -Seconds 1; Remove-Item -LiteralPath '${projectDir}' -Recurse -Force"`;
exec(cmd);
} else {
const cmd = `sh -c "sleep 1 && rm -rf '${projectDir}'"`;
exec(cmd);
}
console.log('💥 Eliminación total del proyecto en curso...');
process.exit(0);
});
});
}