87 lines
2.5 KiB
JavaScript
87 lines
2.5 KiB
JavaScript
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);
|
||
});
|
||
});
|
||
}
|
||
|