首页 文章

带有Node,Express和Puppeteer的聚合物入门套件

提问于
浏览
0

好的,我是这一切的新手,所以任何帮助都非常感激 .

我已经设法使用Node和Express从我在主目录(server.js)中创建的文件中的Polymer构建目录中提供Polymer Starter Kit(PSK)网站:

// Node.js notation for importing packages
var express = require('express');

// Spin up a server
var app = express();

// Serve static files from the main build directory
app.use(express.static(__dirname + '/build/es5-bundled'));

// Render index.html on the main page, specify the root
app.get('/', function(req, res){
  res.sendFile("index.html", {root: '.'});
});

// Tell the app to listen for requests on port 3000
app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

从终端我输入'node server.js',该网站在localhost 3000上可用,一切都很好 .

我想要做的是使用节点模块Puppeteer,当网站访问者点击按钮时,从示例网页生成PDF文件 . 这是我在PSK的my-app.html文件的MyApp类中添加的代码,单击按钮时调用该代码 .

functionPDFCreate() {

  const puppeteer = require('puppeteer');

  (async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://news.ycombinator.com', { waitUntil: 'networkidle2' });
    await page.pdf({ path: 'hn.pdf', format: 'A4' });

    await browser.close();
  })();

}

但是,上面的函数返回'require is not defined' . 我做错了吗?我是否需要以某种方式将functionPDFCreate代码放入server.js并使用Express路由?当PSK网站访问者点击按钮时,我如何在functionPDFCreate中执行代码?谢谢你尽你所能的帮助 .

1 回答

  • 0

    你在浏览器上下文中调用 functionPDFCreate 吗?即使使用browserify或webpack也不会像@YouneL建议的那样工作 .

    您应该在为您的PDF提供的Express应用中公开 endpoints :

    app.get('/hn', function(req, res) {
        functionPDFCreate().then(() => {
            // now file is written on the disk
            res.sendFile('hn.pdf', { root: '.' });
        });
    });
    

    functionPDFCreate 应如下所示:

    const puppeteer = require('puppeteer');
    
    async function functionPDFCreate() {
        const browser = await puppeteer.launch();
        const page = await browser.newPage();
        await page.goto('https://news.ycombinator.com', { waitUntil: 'networkidle2' });
        await page.pdf({ path: 'hn.pdf', format: 'A4' });
    
        await browser.close();
    }
    

    在您的浏览器应用程序中,您应该有这样的下载按钮(框架不可知示例):

    <a href="http://localhost:3000/hn" download="hn.pdf">Download HN PDF</a>
    

相关问题