【问题标题】:With a node.js app and express, how can I pass a function to an ejs page without it running immediately使用 node.js 应用程序和 express,如何在不立即运行的情况下将函数传递给 ejs 页面
【发布时间】:2021-10-04 06:25:15
【问题描述】:

我正在使用 mongoose 和 express 在 node.js 中编写一个应用程序。我想将使用 puppeteer 打开浏览器窗口的异步函数传递给 ejs 页面,然后单击按钮运行该函数。此刻,当打开ejs页面时,该函数立即运行并打开浏览器窗口。我希望该功能在按下按钮之前不运行。

我的代码如下所示:

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

new.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. -->

我看过一些类似的问题,这些问题建议将函数代码放在 ejs 文件中的脚本中(我想避免),或者创建一个事件处理程序(我不知道如何将这个想法应用于我的代码)。

谢谢

【问题讨论】:

  • 您不能从浏览器调用 node.js 函数。您需要在 http api 端点上执行此操作。 “browserModule.startBrowser”在客户端浏览器渲染后不存在。

标签: javascript node.js express ejs


【解决方案1】:

您可以通过引用函数而不是调用它来实现类似的效果。

改变 const openBrowser = browserModule.startBrowser(); const openBrowser = browserModule.startBrowser;

【讨论】:

  • 不幸的是,这不起作用。我添加了 startBrowser 函数的代码,并删除了 const openBrowser 并将 browserModule.startBrowser 代码直接添加到渲染中。它与异步函数有关吗?
  • 到底有没有效果?
  • 我不能说。和以前一样,一旦页面加载,浏览器就会打开。
  • 应该是export.modules = async function startBrowser 还是module.exports = async function startBrowser()
【解决方案2】:

我错误地尝试在订购应用程序中使用网络浏览器应用程序,方法是从订购应用程序的视图中调用网络浏览器应用程序中的函数。 Marc 说那不可能是正确的。

我有两个选择:分离出这 2 个应用程序并创建一个可与订购应用程序一起使用的网络浏览器 API,或者将网络浏览器应用程序完全集成到订购应用程序中。

我选择了后者,并使用 MVC 模式为浏览器创建了单独的模型和路由文件,这些文件与订购应用程序的文件并存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 2020-09-10
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 2014-05-19
    相关资源
    最近更新 更多