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

Blu*_*ame 4 http http-method node.js azure-functions

在 Azure Functions 中构建应用程序时,您可以指定 function.json 中接受的 HTTP 方法

给定一个可以执行多种功能(GET、PUT POST 等)的 API,创建该功能的最佳方法是什么。

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

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

即我认为我不应该为每个为其创建函数的对象执行此操作,并且必须有更好的模式。

 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'){

            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

Blu*_*ame 6

因此,最好的方法是使用多个函数。

您可以在 function.json 文件中通过路由和方法定义函数。请参阅示例。

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

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

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": ["get"],
      "route": "family/{id:int}"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

  • 正确,但它非常难以维护。问题的目的是找到做到这一点的最佳方法。我认为这是目前最好的办法,而不是唯一的办法。我的代码中有 if 语句,它变得非常长,特别是对于检索和保存多个对象而言。现在我有了遵循单一责任原则的非常简洁的源文件。 (3认同)