【发布时间】: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