如何使操纵up的人使用Firebase功能?

时间:2020-03-31 17:54:04

标签: javascript node.js firebase google-cloud-functions puppeteer

我创建端点“ / 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);

1 个答案:

答案 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();

});