Nano Hash - криптовалюты, майнинг, программирование

Как заставить кукловода работать с функциями Firebase?

Я создаю конечную точку «/ getpdf» и развертываю функцию в firebase. В результате должен быть загружен PDF-файл в браузере. Но когда я прошу это, я получаю ошибку 404. Когда я тестирую одно и то же приложение без firebase (с помощью express app.listen), оно работает нормально, и PDF-файл загружается. Когда я не использую кукловод, а попробую, например, простую функцию firebase request.send ("Hello World"), работает.

Все настройки firebase по умолчанию.

Было бы здорово, если бы кто-нибудь мог мне помочь и показать мне способ загрузить файл pdf, созданный кукловодом, с помощью функций firebase.

заранее спасибо

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);

  • К кукольнику это не имеет никакого отношения. Вы просто обращаетесь к неправильному URL-адресу для вызова функции. Он не будет работать так же, как если бы вы запустили локальный экспресс-сервер. Измените вопрос, чтобы уточнить, что вы делаете для вызова функции. 31.03.2020

Ответы:


1

Я ошибся в сочетании экспресс и 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();

});
31.03.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..