如何将 Netlify 函数端点定义为 POST?

How to define Netlify function endpoint as POST?

我是无服务器的新手,正在努力了解它。所以我使用 GET 在 netlify 上创建了一个函数,它工作正常。

然后我想要一个 POST 端点,所以我遵循相同的格式并创建了一个类似的函数。但是后来我向这个新功能发送了一个 POST 请求。在检查服务器上的 console.log 时,我意识到它被读取为使用 GET 方法 (httpMethod:'GET') 的请求。然后我意识到我没有定义我会在普通服务器上完成的端点方法。

但我不知道该怎么做。

问题

是否有不同的方法在 netlify 或无服务器上执行 GET 函数和 POST 函数?

如果答案是肯定的,请指导我。

如果答案是否定的,并且函数是以相同的方式编写的,那么有人可以告诉我为什么我的 POST 请求被 netlify 读取为 GET 吗?

这是 codesandbox 上函数的代码.. https://codesandbox.io/s/serverless-function-2xebuf?file=/src/index.js

根据我的经验,您不能明确定义函数处理程序应该响应什么动词,我通常会检查事件动词:

if (event.httpMethod !== 'POST') {
    return {
        statusCode: 501,
        body: JSON.stringify({ message: "Not Implemented" }),
        headers: { 'content-type': 'application/json' }
}

发布此问题的答案,以提醒我,如果它能帮助将来遇到类似问题的人

感谢@alessiopremoli 分享无法明确定义函数处理程序应响应的动词 .. 这回答了我的第一个问题:在 netlify 或无服务器上执行 GET 函数和 POST 函数有不同的方法吗?

我面临的第二个问题是 我的 POST 请求被 netlify 读取为 GET..我意识到问题是什么..有一个设置netlify.toml 文件中的重定向规则将 URL 简化为 api.. 因此您可以键入“site.com/api/functionName.js”而不是“site.com/.netlify/functions/functionName.js

[[redirects]]
  from = "/*"
  to = "/blog/:splat"

并且我将其用于我的 api 路线作为

[[redirects]]
from="/api/*"
to="/.netlify/functions/:splat"

以简化对我的 api 路由的访问.. 但我没有意识到默认情况下此重定向的状态代码是 301,它将方法更改为 GET 这是还更改了我的请求方法。所以对于遇到这个问题的人,我希望这能有所帮助。

如果它是一个 POST 请求并且您正在使用重定向选项,那么请确保您添加状态 200 或仅使用您设置的默认路径调用该函数,例如"site.com/.netlify/functions/functionName.js"

所以将重定向规则更改为下面的规则对我来说解决了这个问题

[[redirects]]
from="/api/*"
to="/.netlify/functions/:splat"
status=200

这里是 netlify 支持团队的 link,帮助解决了这个问题,更好地解释了它 (https://answers.netlify.com/t/does-using-the-redirects-route-to-a-function-call-change-the-method-of-the-request-from-post-to-get/55760/5)