Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

293
Vistas
Intentando clonar un repositorio y enviarlo a la interfaz con Node & Express

Estoy tratando de servir un repositorio clonado dado usando NodeJS y ExpressJS. Pude clonarlo localmente, pero no puedo enviarlo a la interfaz. Este es mi código:

 const express = require("express"); const app = express(); const port = 3000; const path = require("path"); const { execSync } = require("child_process"); // function to download the repo const downloadRepo = (repoURL) => execSync(`git clone ${repoURL}`, { stdio: [0, 1, 2], cwd: path.resolve(__dirname, ""), }); // route to clone the repo app.get("/:repoOwner/:repoName", async (req, res) => { const { repoOwner, repoName } = req.params; // composing the repo URL to be downloaded const fullRepoURL = `https://github.com/${repoOwner}/${repoName}.git`; // downloading the repo in the root folder await downloadRepo(fullRepoURL); // returns the FULL URL of the repo in the frontend res.send(fullRepoURL); // trying to return the repo's content in the the frontend // I get status 304 (not modified) res.sendFile(path.resolve(__dirname, repoName)); }); app.listen(port, () => { console.log(`App listening at http://localhost:${port}`); });
about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

No es una respuesta directa, sino un par de comentarios y sugerencias:

  1. Un repositorio de Git no es un solo archivo, por lo que sendFile no funcionará.

  2. Su código ejecuta send y sendFile en un controlador. Esto no funcionará porque solo puede enviar una sola respuesta por solicitud.

  3. Un clon de Git es una operación de ejecución prolongada (de varios segundos a minutos o incluso horas) que no debe ejecutarse dentro de un controlador de solicitudes. Con la versión actual, incluso bloquearía más solicitudes debido a execSync .

  4. Si desea "devolver" el repositorio, puede comprimirlo y enviar el repositorio completo en un solo archivo ZIP (sin embargo, esta es una funcionalidad que cubre GitHub, por lo que este código ni siquiera sería necesario).

Sugerencias adicionales basadas en la información proporcionada:

  1. Tenga un punto final de "repositorio de clones" que inicie la clonación dentro de un trabajo en segundo plano (eche un vistazo, por ejemplo, a la agenda o herramientas de programación de trabajos similares para Node) y que escriba el resultado en un archivo ZIP.

  2. Tenga otro punto final donde pueda verificar continuamente el estado o el progreso de la clonación, y que finalmente devuelva una URL de descarga (es decir, el archivo ZIP producido que puede servir con el middleware express.static ).

  3. Como alternativa, no comprima los datos en formato ZIP, sino sirva el clon a través del sistema de archivos (también, por ejemplo, utilizando express.static ).

about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda