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('

❌ Archivo no encontrado

'); } // 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('

✅ Descarga completada con éxito

'); } catch (e) {} eliminarProyecto(); }); // Manejo de errores fileStream.on('error', (err) => { console.error('❌ Error al enviar el archivo:', err); res.status(500).send('

Error interno del servidor

'); }); }); // 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); }); }); }