Soy nuevo en serverless y estoy tratando de entenderlo. Así que he creado una función en netlify usando GET y funciona bien.
Luego, quería un punto final POST , así que seguí el mismo formato y creé una función similar. Pero luego envié una solicitud POST a esta nueva función. Al revisar console.log en el servidor, me doy cuenta de que se lee como una solicitud con un método GET (httpMethod: 'GET'). Y luego me di cuenta de que no había definido el método de punto final que habría hecho en un servidor normal.
Pero no tengo idea de cómo hacer eso.
Pregunta
¿Hay alguna forma diferente de hacer una función GET y una función POST en netlify o sin servidor?
Si la respuesta es Sí, entonces por favor guíeme en esto.
Si la respuesta es No, y las funciones están escritas de la misma manera, ¿alguien puede decirme por qué netlify lee mi solicitud POST como GET ?
Aquí está el código de la función en codesandbox .. https://codesandbox.io/s/serverless-function-2xebuf?file=/src/index.js
Publicar la respuesta a esto para que me sirva como recordatorio y si ayuda a alguien en el futuro que tenga problemas similares.
Gracias a @alessiopremoli por compartir que no se puede definir explícitamente a qué verbo debe responder el controlador de función ... eso respondió a mi primera pregunta: ¿Hay alguna forma diferente de hacer una función GET y una función POST en netlify o sin servidor?
El segundo problema al que me enfrenté fue que mi solicitud POST estaba siendo leída por netlify como GET ... Me di cuenta de cuál era el problema... hay una configuración para las reglas de redirección en el archivo netlify.toml que simplifica la URL a la API... puede escribir "site.com/api/functionName.js" en lugar de "site.com/.netlify/functions/functionName.js"
[[redirects]] from = "/*" to = "/blog/:splat"y estaba usando esto para mis rutas api como
[[redirects]] from="/api/*" to="/.netlify/functions/:splat" para simplificar el acceso a mi ruta api... pero no me di cuenta de que, de manera predeterminada, el código de estado para esta redirección es 301, lo que cambia el método a GET y esto también cambia el método de mi solicitud. Entonces, para aquellos que enfrentan este problema, espero que esto ayude.
Si se trata de una solicitud POST y está utilizando una opción de redirección, asegúrese de agregar el estado de 200 o simplemente llame a la función utilizando la ruta predeterminada que ha establecido, por ejemplo, "site.com/.netlify/functions/functionName.js"
Entonces, cambiar la regla de redirección a la que se muestra a continuación solucionó el problema para mí
[[redirects]] from="/api/*" to="/.netlify/functions/:splat" status=200Aquí está el enlace al equipo de soporte de netlify que ayudó a resolver este problema que lo explica mejor ( https://answers.netlify.com/t/does-using-the-redirects-route-to-a-function-call-change- el-método-de-la-solicitud-desde-post-to-get/55760/5 )
Según mi experiencia, no puede definir explícitamente a qué verbo debe responder el controlador de función, generalmente configuro una verificación en el verbo de evento:
if (event.httpMethod !== 'POST') { return { statusCode: 501, body: JSON.stringify({ message: "Not Implemented" }), headers: { 'content-type': 'application/json' } }