【发布时间】:2021-01-04 11:42:37
【问题描述】:
注意:这里没有问题,问题在于我的 functions.json 脚本文件位置。它指向一个旧的脚本文件。当我指向一个新的时,它就开始工作了。
我不确定为什么会发生这种情况,我有一个 try-catch 块,并且该函数永远不会命中 catch 块,但我尝试上传的图像永远不会出现在容器中。
我是 NODEJS 的新手。由于无法使用 C# 函数实现相同的功能,因此我决定将其写在节点中。
问题:Azure 函数服务总线主题触发,获取消息负载并使用 puppeteer 抓取页面的屏幕截图。缓冲区的输出是缓冲区的形式,我正在尝试将其上传到 Azure 存储 blob。
import { AzureFunction, Context } from "@azure/functions";
import { ServiceBusMessage } from "@azure/service-bus";
import * as puppeteer from 'puppeteer';
import * as BlobServiceClient from "azure-storage";
import { Readable } from 'stream';
const serviceBusTopicTrigger: AzureFunction = async function (context: Context, mySbMsg: ServiceBusMessage): Promise<void> {
try {
const promotionId = context.bindingData.userProperties.promotionId;
context.log('Player Screen Grabber ServiceBus topic trigger function processing message started', promotionId);
const playerURL = process.env['playerURL'] + promotionId + '/';
let browser = await puppeteer.launch({ headless: true });
let page = await browser.newPage();
await page.goto(playerURL, { waitUntil: 'networkidle2' });
await page.setViewport({ width: 1920, height: 1080 });
const screenshotBuffer = await page.screenshot({
encoding: 'binary'
});
await page.close();
await browser.close();
const newPlayerScreenShotStream = new Readable({
read() {
this.push(screenshotBuffer);
},
});
var fileName = promotionId + ".png";
context.bindings.fileName = fileName;
context.bindings.storage = screenshotBuffer;
context.done();
context.log('Player Screen Grabber ServiceBus topic trigger function processing message ended', promotionId);
}
catch (error) {
throw error;
}
};
【问题讨论】:
标签: node.js azure azure-functions serverless