在 Azure Functions (NodeJS) 中处理多个 HTTP 方法的正确方法是什么

What is the correct way to handle multiple HTTP Methods in Azure Functions (NodeJS)

在 Azure Functions 中构建应用程序时,您可以指定 function.json

中接受的 HTTP 方法

给定一个 API,您可以在(GET、PUT POST 等)上执行多个函数,创建该函数或多个函数的最佳方法是什么。

将需要共享逻辑和库,因此我正在寻找一种模式,可以在单个 class 中启用所有方法,但不确定您将如何定义它function.json 这样每个 HTTP 方法都可以有自己的入口点。

另一种选择是创建一个基本上选择方法和 class 该函数的函数,但这似乎是一些中间件开销,我相信可以用更好的方式处理。

即我不认为我应该为我为其创建函数的每个对象都这样做,并且必须有更好的模式。

 async HandleRequest(){
        return validateJwt(function(context,req){
            if(req.method === 'GET'){
            }
            else if(req.method === 'POST'){

            }
            else if(req.method === 'DELETE'){

            }
            else if(req.method === 'PUT'){

            }
            else if(req.method === 'PATCH'){

            }
        });
    }

您的 function.json 应该是这样的:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ]
}

默认情况下,如果未指定方法,则该函数接受所有方法。

所以最好的方法是使用多个函数。

您可以在function.json文件中通过路由和方法定义函数。 看例子。

注意route:family/{id:int}这是该函数将处理的唯一路径。您还放入 "methods": ["get"] 以将函数限制为 GET。

为每个方法创建一个函数,以提高代码的可维护性。然后,在我拥有一个执行 CRUD 操作(包括管理与数据库的连接)的通用 FamilyHandler Class 之前,我使用了一些中间件功能(执行身份验证和错误处理)。

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": ["get"],
      "route": "family/{id:int}"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ]
}

我在以下文档中发现了这一点 https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook-trigger?tabs=javascript