【问题标题】:NodeJs/Express Puppeteer launching local viewNodeJs/Express Puppeteer 启动本地视图
【发布时间】:2020-02-26 16:22:07
【问题描述】:

我有 NodeJs/Express 应用程序,我想在其中打开新的浏览器窗口并将本地 ejs 视图呈现到其中。我正在尝试使用 Puppeteer 来做到这一点。

    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

提前感谢您的任何指导。

【问题讨论】:

    标签: node.js express ejs puppeteer


    【解决方案1】:

    代替:

    await page.goto(...); // This code is acting like your browser's address bar
    

    试试

    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)
    

    上面的代码可以让你在你的服务器上创建你的页面。 使用page.setContent(..),您可以加载任何 HTML 字符串。

    【讨论】:

    • 谢谢。我现在没有收到任何错误。浏览器打开,但我得到的不是预期的页面布局,而是一个文本:../views/mypage.ejs。任何想法我错过了什么?
    • 您需要将视图的内容转换为字符串。 Puppeteer 不知道如何处理 ejs 文件,但它可以将 HTML 作为字符串处理。例如,这应该可以工作:page.setContent('<h1>Test</h1>')。您需要获取 mypage 的内容并将其传递给page.setContents()
    • 看到您更新了问题中的代码。您需要找到采用文件路径的ejs.render 方法,例如ejs.renderFile
    • 知道了。我现在得到了布局,但看起来脚本和 css 的链接都没有工作。
    • 是的,这是“服务器端渲染”页面的开始。它的工作量很大。另一种看待这个问题的方法是更少的工作。是制作另一个包含您的 puppeteer 逻辑的 Express 应用程序。然后运行您的原始网站。然后在 puppeteer 应用中你可以使用page.goto('http://<mypagesite>')
    猜你喜欢
    • 2022-12-30
    • 2014-12-17
    • 2020-03-20
    • 2015-01-16
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    相关资源
    最近更新 更多