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

168
Vistas
Con una aplicación node.js y express, ¿cómo puedo pasar una función a una página ejs sin que se ejecute inmediatamente?

Estoy escribiendo una aplicación en node.js, usando mongoose y express. Quiero pasar una función asíncrona que abre una ventana del navegador usando titiritero a una página ejs y ejecutar esa función con un clic de botón. En este momento, cuando se abre la página ejs, la función se ejecuta inmediatamente y se abre la ventana del navegador. Quiero que la función no se ejecute hasta que se presione un botón.

Mi código se ve así:

browserModule.js

 const puppeteer = require('puppeteer'); export.modules = async function startBrowser { let browser; try { console.log("Opening the browser......"); browser = await puppeteer.launch({ headless: false, args: [ "--disable-setuid-sandbox", ], 'ignoreHTTPSErrors': true }); } catch (err) { console.log("Could not create a browser instance => : ", err); } }

pageController.js

 const browserModule = require('../browserModule'); module.exports.renderNewForm = async (req, res) => { res.render('/new', browserModule.startBrowser); }

nuevo.ejs

 <button class="btn btn-info" onclick=openBrowser>Open Book Site</button> <!-- NOTE: This code does nothing, the openBrowser function runs immediately and the new browser window is opened. Clicking on the button has no effect. -->

He analizado algunas preguntas similares que sugieren poner el código de la función en un script en el archivo ejs (que me gustaría evitar) o crear un controlador de eventos (no pude encontrar la manera de aplicar esa idea a mi código) .

Gracias

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede lograr algo así haciendo referencia a la función en lugar de llamarla.

Cambiar const openBrowser = browserModule.startBrowser(); to const openBrowser = browserModule.startBrowser;

about 4 years ago · Juan Pablo Isaza Denunciar

0

Intentaba incorrectamente usar una aplicación de navegador web dentro de una aplicación de pedidos llamando a una función desde la aplicación de navegador web desde una vista de la aplicación de pedidos. Marc tenía razón al decir que eso no se podía hacer.

Tenía dos opciones: separar las 2 aplicaciones y crear una API de navegador web que pudiera usar con la aplicación de pedidos, o integrar completamente la aplicación de navegador web en la aplicación de pedidos.

Elegí el último y, usando el patrón MVC, creé archivos de modelo y rutas separados para el navegador que se encuentran junto a los de la aplicación de pedidos.

about 4 years ago · Juan Pablo Isaza 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