我创建端点“ / getpdf”,并将功能部署到firebase。结果应该是浏览器中的pdf下载。但是,当我请求它时,出现404错误。当我在不使用Firebase的情况下测试同一应用程序时(使用express app.listen),它可以正常工作,并且下载了pdf。当我不使用puppeteer时,例如尝试一个简单的request.send(“ Hello World”)firebase函数。
所有firebase设置均为默认设置。
如果有人可以帮助我并向我展示一种方法,可以通过Firebase函数下载由puppeteer创建的pdf文件,那么效果很好。
预先感谢
const express = require('express');
const functions = require('firebase-functions');
const puppeteer = require('puppeteer');
const app = express();
app.use(function cors(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Content-Type', 'application/pdf;charset=utf-8');
res.header('Content-Disposition', 'attachment; filename=some_file.pdf');
next();
});
app.get('/getpdf', async function getpdfHandler(req, res) {
var browser = await puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] });
try {
const page = await browser.newPage();
await page.setContent("<html><head></head><body><h1>HELLO WORLD!</h1></body></html>")
const buffer = await page.pdf({
format: 'A4',
printBackground: true,
margin: {
left: '0px',
top: '0px',
right: '0px',
bottom: '0px'
}
})
res.type('application/pdf').send(buffer);
} catch (e) {
res.status(500).send(e.toString());
}
await browser.close();
});
exports.getpdf = functions.https.onRequest(app);
答案 0 :(得分:0)
我在Express和Firebase的组合中犯了一个错误。如果我不做任何表达,那就行得通。这就完成了我的问题:
const functions = require('firebase-functions');
const puppeteer = require('puppeteer');
exports.getpdf = functions.https.onRequest(async (req, res) => {
var browser = await puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] });
try {
const page = await browser.newPage();
await page.setContent("<html><head></head><body><h1>HELLO WORLD!</h1></body></html>")
const buffer = await page.pdf({
format: 'A4',
printBackground: true,
margin: {
left: '0px',
top: '0px',
right: '0px',
bottom: '0px'
}
})
res.header('Content-Type', 'application/pdf;charset=utf-8');
res.header('Content-Disposition', 'attachment; filename=some_file.pdf');
res.type('application/pdf').send(buffer);
} catch (e) {
res.status(500).send(e.toString());
}
await browser.close();
});