我正在创建一个相对简单的javascript应用程序,它作为azure函数应用程序在节点上运行,并最终返回生成的png。我安装了 Azure Function 扩展,以便使用一个非常简单的 hello world 应用程序。我将其发布到 azure,效果很好。
问题是 - 我想使用 canvas 来创建 png 图像,但是当我修改代码并发布时,我找不到任何 HTTP 触发器,并且 azure 门户上没有列出任何函数。
我大大减少了代码,只是为了显示实际上破坏它的代码有多么少。
httpTrigger1.js
const { app } = require('@azure/functions');
const { createCanvas } = require('canvas'); // ***
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
handler: async (request, context) => {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || await request.text() || 'world';
const canvas = createCanvas(600, 600); // ***
return { body: `Hello, ${name}!` };
}
});
当删除用 *** 注释的行并发布到 azure 函数应用程序时,触发器会显示并且应用程序会正常返回正文。
packages.json
{
"name": "accelerate.ai.chart_v3",
"version": "1.0.0",
"description": "",
"scripts": {
"start": "func start",
"test": "echo \"No tests yet...\""
},
"dependencies": {
"@azure/functions": "^4.5.1",
"canvas": "^2.11.2"
},
"main": "src/{index.js,functions/*.js}"
}
Azure 功能应用程序设置:
堆栈 = Node.js
Node.js 版本:Node.js 20 LTS
使用 Azure Functions 扩展 1.15.4
所以我自己解决了这个问题! :)
首先,我创建了一个新项目,并使用 azure 函数 VS Code 扩展选择了模型 3,而不是模型 4。这给了我一个不同的项目结构,其中包含一个 function.json 文件。
然后我使用 windows、x64、node v20 创建了一个新的函数应用程序。
当我发布应用程序时,触发器现在仍然存在并且没有中断!!