Node.js NodeJs/Express木偶演员启动本地视图
我有一个NodeJs/Express应用程序,我想在其中打开新的浏览器窗口,并在其中呈现本地ejs视图。我正试着用木偶演员来做这件事Node.js NodeJs/Express木偶演员启动本地视图,node.js,express,ejs,puppeteer,Node.js,Express,Ejs,Puppeteer,我有一个NodeJs/Express应用程序,我想在其中打开新的浏览器窗口,并在其中呈现本地ejs视图。我正试着用木偶演员来做这件事 const puppeteer = require('puppeteer'); router.post('/new_window', async (req, res) => { try { const browser = await puppeteer.launch({headless: false}); const page
const puppeteer = require('puppeteer');
router.post('/new_window', async (req, res) => {
try {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
const pageContent = ejs.render('../views/mypage.ejs', {})
await page.setContent(pageContent)
//await page.screenshot({path: 'example.png'});
// await browser.close();
} catch (err) {
res.status(500)
console.log(err)
res.send(err.message)
}
})
在浏览器中,我得到的不是页面布局,而是:
../views/mypage.ejs
提前感谢您的指导。而不是:
await page.goto(...); // This code is acting like your browser's address bar
试一试
上面的代码将允许您在服务器上创建页面。
使用
page.setContent(..)
可以加载任何HTML字符串。谢谢。我现在没有收到任何错误。浏览器打开了,但我得到的不是预期的页面布局,而是一个文本:../views/mypage.ejs。你知道我遗漏了什么吗?你需要把视图的内容转换成字符串。Puppeter不知道如何处理ejs文件,但它可以将HTML作为字符串处理。例如,这应该起作用:page.setContent('Test')
。您需要获取mypage的内容,并将其传递到page.setContents()
看到您更新了问题中的代码。您需要找到一个采用文件路径的ejs.render
方法,比如ejs.renderFile
得到了它。我现在得到了布局,但是看起来脚本和css的链接都不起作用。是的,这是“服务器端呈现”页面的开始。这需要做很多工作。另一种看待这个问题的方法是减少工作量。是制作另一个包含木偶师逻辑的快速应用程序。然后运行你原来的网站。然后在木偶演员应用程序中,您可以使用page.goto('http://')
const pageContent = ejs.render('../views/mypage.ejs', {data to populate your .ejs page}) //This is sudo code. Check ejs docs on how to do this
await page.setContent(pageContent)