带有 Node、Express 和 Puppeteer 的 Polymer 入门套件
Polymer Starter Kit with Node, Express, and Puppeteer
好的,我是这一切的新手,所以非常感谢任何帮助。
我已经设法使用 Node 和 Express 从我在主目录 (server.js) 中创建的文件的 Polymer build 目录提供 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 class 的代码,单击按钮时将调用它。
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();
})();
}
但是returns'require is not defined'上面的函数。我做错了吗?我是否需要以某种方式将 functionPDFCreate 代码放入 server.js 并使用 Express 路由?当 PSK 网站访问者单击按钮时,我究竟如何执行 functionPDFCreate 中的代码?感谢您提供的任何帮助。
您是在浏览器上下文中调用 functionPDFCreate
吗?正如@YouneL 建议的那样,即使使用 browserify 或 webpack 也无法正常工作。
您应该在提供 PDF 的 Express 应用程序中公开端点:
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>
好的,我是这一切的新手,所以非常感谢任何帮助。
我已经设法使用 Node 和 Express 从我在主目录 (server.js) 中创建的文件的 Polymer build 目录提供 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 class 的代码,单击按钮时将调用它。
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();
})();
}
但是returns'require is not defined'上面的函数。我做错了吗?我是否需要以某种方式将 functionPDFCreate 代码放入 server.js 并使用 Express 路由?当 PSK 网站访问者单击按钮时,我究竟如何执行 functionPDFCreate 中的代码?感谢您提供的任何帮助。
您是在浏览器上下文中调用 functionPDFCreate
吗?正如@YouneL 建议的那样,即使使用 browserify 或 webpack 也无法正常工作。
您应该在提供 PDF 的 Express 应用程序中公开端点:
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>