El cambio de última hora de SvelteKit del 19 de enero (ver aquí para más detalles) significa que mi integración con Formularios de Google ya no funciona.
Fue una dificultad menor hacer que funcionara en primer lugar, y no puedo actualizarlo; recibo repetidamente el mensaje de error: "Para acceder al cuerpo de la solicitud, use los métodos text/json/arrayBuffer/formData, p. ej. body = await request.json()
", y un enlace a la conversación de GitHub.
Aquí está mi componente de Contact
...
<script> let submitStatus; const submitForm = async (data) => { submitStatus = 'submitting'; const formData = new FormData(data.currentTarget); const res = await fetch('contact.json', { method: 'POST', body: formData }); const { message } = await res.json(); submitStatus = message; }; const refreshForm = () => { /* Trigger re-render of component */ submitStatus = undefined; }; </script>
... y aquí está el contact.json.js
correspondiente:
export const post = async (request) => { const name = request.body.get('name'); const email = request.body.get('email'); const message = request.body.get('message'); const res = await fetch(`URL TO RELEVANT GOOGLE FORM GOES HERE`); if (res.status === 200) { return { status: 200, body: { message: 'success' } }; } else { return { status: 404, body: { message: 'failed' } }; } };
¡Cualquier ayuda sería muy apreciada!
La solución es, de hecho, relativamente simple y solo implicó un pequeño cambio en el código existente. Tuve que acceder a event.request
(desestructurado para request
) y continuar desde allí, impulsado por esta respuesta a una pregunta similar. Entonces, después de eso, contact.json.js
parece...
export const post = async ({ request }) => { const body = await request.formData(); const name = body.get('name'); const email = body.get('email'); const message = body.get('message'); const response = await fetch(`URL TO RELEVANT GOOGLE FORM GOES HERE`); if (response.status === 200) { return { status: 200, body: { message: 'success' } }; } else { return { status: 404, body: { message: 'failed' } }; } };
(Tenga en cuenta también que todo este formulario se basó en este video de WebJeda, que ahora no funcionará con la última versión de SvelteKit, pero sí con esta simple modificación).