Express_Server/server.js

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