0

我正在尝试解决我的 Firebase 计划云功能的问题,Firebase 支持建议我检查

如果有问题的功能保持持久连接

我在这里参考文档,但示例是 HTTPS 函数,即具有reqres参数。我正在处理的功能是预定功能,即:

functions.pubsub.schedule('every 5 minutes').onRun((context) => {//some work})

没有reqres参数,如何检查firebase调度云功能是否保持持久连接?

编辑:

我收到了 Firebase 支持的回复,他们建议我检查从我的预定函数发出的 HTTP 请求的持久连接。

我的计划函数通过抓取 pdf URL 执行网络抓取任务,然后从这些 pdf 文档中提取纯文本。我面临的问题是这些任务总是因我无法捕捉到的“Bad end offset”错误而崩溃。pdfjsFirebase 支持怀疑在访问 pdf 的 URL时连接不是持久的。

Error: Bad end offset: 1376305
    at ChunkedStream.onReceiveData (/workspace/node_modules/pdfjs-dist/es5/build/pdf.worker.js:12255:15)
    at ChunkedStreamManager.onReceiveData (/workspace/node_modules/pdfjs-dist/es5/build/pdf.worker.js:12818:21)
    at /workspace/node_modules/pdfjs-dist/es5/build/pdf.worker.js:12602:15
    at process._tickCallback (internal/process/next_tick.js:68:7)

在此处输入图像描述

代码:

const pdf = require('../pdf/pdf')

function getTextByUrl() {
    let url = "https://www.nea.gov.sg/docs/default-source/our-services/amendments-to-copeh-for-the-removal-of-roof-gutters-for-a-amp-a-or-reconstruction-works-involving-roof-structures.pdf"

    let options = pdf.setupPdfOptions(url)
    return extract(options)
}

function extract(options) {
    return pdf.getPlainBody(options)
    .then(pb => {
        console.log("Text extraction done:", pb)
    })
    .catch(err => {
        console.log("Err:", err)
    })
}

在 pdf.js 脚本中:

const pdfjslib = require('pdfjs-dist/es5/build/pdf.js');

function getPlainBody(options) {
    console.log("1")
    return getDocument(options)
    .then(doc => {
        console.log("4")
        return extractTexts(doc, doc.numPages)
    })
    .catch(err => console.log('Get plainBody err:', err))
}

function getDocument(options) { 
    console.log("2")
    var loadingTask = pdfjslib.getDocument(options)
    return loadingTask.promise
    .then((doc) => {
        console.log("3") //<== Not logged and crashed
        return doc
    })
    .catch(err => console.log("getDocument err:", err)) //<== Didn't catch the "Bad end offset" error
}

function extractTexts(doc, maxNumPages) {
    var promises = []
    for (pageNum = 1; pageNum <= maxNumPages; pageNum++) {
        const promise = getText(pageNum, doc)
        promises.push(promise)
    }

    return Promise.all(promises)
    .then((results) => {
        var pdfString = []
        for (const result of results) {
           pdfString.push(result);
        }

        return pdfString.join('').replace(/\s{2,}/g,' ').trim();
    })
    .catch((err) => {
        console.log('Error extracting text', err)
    })
}


function getText(pageNum, doc) { 
    console.log("5")
    return doc.getPage(pageNum)
    .then((page) => {
        return page.getTextContent()
    })
    .then((content) => {        
        var strings = content.items.map((item) => {
            return item.str
        });
        
        const concatStrings = strings.join('');
        return concatStrings;
    })
    .catch((err) => {
        console.log('Error getting text', err)
        return
    })
}

function setupPdfOptions(url) {
    return {
        url: url,
        httpHeaders: {
            "User-Agent": //My useragent,
        },
    };
}

我试图在agent = new http.Agent({keepAlive: true});atsetupPdfOptions但它仍然崩溃。

我可以做些什么来保持pdfjs与 pdf 的 URL 之间的持久连接?

我正在运行节点引擎 10,并且"pdfjs-dist": "^2.4.456".

4

0 回答 0