使用 node.js 应用程序和 express,如何在没有它的情况下立即将函数传递给 ejs 页面 运行
With a node.js app and express, how can I pass a function to an ejs page without it running immediately
我正在 node.js 中使用 mongoose 和 express 编写应用程序。我想将使用 puppeteer 打开浏览器 window 的异步函数传递给 ejs 页面,并通过单击按钮传递 运行 该函数。此时打开ejs页面,函数运行立即打开,浏览器window打开。我希望函数在按下按钮之前不会 运行。
我的代码如下所示:
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 文件的脚本中(我想避免),或者创建一个事件处理程序(我不知道如何应用它我的代码的想法)。
谢谢
您可以通过引用函数而不是调用它来实现类似的目的。
改变 const openBrowser = browserModule.startBrowser();
到const openBrowser = browserModule.startBrowser;
我错误地尝试在订购应用程序中使用网络浏览器应用程序,方法是从订购应用程序的视图调用网络浏览器应用程序中的函数。 Marc 说这是不可能的是正确的。
我有两个选择:将 2 个应用程序分开并创建一个网络浏览器 api 我可以与订购应用程序一起使用,或者将网络浏览器应用程序完全集成到订购应用程序中。
我选择了后者,并且使用 MVC 模式,为浏览器创建了单独的模型和路由文件,与订购应用程序的模型和路由文件并存。
我正在 node.js 中使用 mongoose 和 express 编写应用程序。我想将使用 puppeteer 打开浏览器 window 的异步函数传递给 ejs 页面,并通过单击按钮传递 运行 该函数。此时打开ejs页面,函数运行立即打开,浏览器window打开。我希望函数在按下按钮之前不会 运行。
我的代码如下所示:
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 文件的脚本中(我想避免),或者创建一个事件处理程序(我不知道如何应用它我的代码的想法)。
谢谢
您可以通过引用函数而不是调用它来实现类似的目的。
改变 const openBrowser = browserModule.startBrowser();
到const openBrowser = browserModule.startBrowser;
我错误地尝试在订购应用程序中使用网络浏览器应用程序,方法是从订购应用程序的视图调用网络浏览器应用程序中的函数。 Marc 说这是不可能的是正确的。
我有两个选择:将 2 个应用程序分开并创建一个网络浏览器 api 我可以与订购应用程序一起使用,或者将网络浏览器应用程序完全集成到订购应用程序中。
我选择了后者,并且使用 MVC 模式,为浏览器创建了单独的模型和路由文件,与订购应用程序的模型和路由文件并存。