tengo una interfaz donde defino una cadena en este caso videoLink . Además de eso, tengo una función asíncrona que se inicia cuando se hace clic en un botón.
//sveltekit async function addToQueue(){ console.log(videoLink); const res = await fetch('/tool/server', { method: 'POST', body: { videoData: videoLink } }) const json = await res.json() console.log(json); videoLink = ""; }Esta función envía una solicitud de publicación http con recuperación a mi archivo server.js.
/** @type {import('@sveltejs/kit').RequestHandler} */ export async function POST(event) { const data = await event.request.body; const link = data.videoData; console.log(link) } cuando ejecuto la solicitud posterior (haciendo clic en el botón en mi interfaz), mi servidor registra undefined . Por lo que sé, el servidor recibe la solicitud POST, porque solo se registra si hago clic en el botón.
Pero, ¿por qué devuelve undefined ? He intentado analizar el json, pero no funcionó. ¿Alguien puede ayudarme? ¿Qué está mal con mi JSON?
Abra las herramientas de desarrollo en su navegador. Mira la pestaña Red. Examine la carga de la solicitud que está enviando:
[object Object]
fetch no admite objetos simples para la opción de body . Los convertirá en cadenas con su método toString() .
Debe proporcionar:
fetch sí admite. Las opciones comunes sonapplication/x-www-form-urlencoded datamultipart/form-dataJSON.stringify ) y también establezca el encabezado de solicitud HTTP content-type para que coincidaEl que elija dependerá de las codificaciones que admita el código del lado del servidor.
Así que he proporcionado
headers: { 'Content-Type': 'application/json' }para obtener los datos.
En el lado del servidor he hecho lo siguiente:
export async function POST({request}) { const data = await request.json() console.log(data) return {} } Ahora la función devuelve {} , que no es obligatorio. La razón por la que funciona ahora es que POST obtiene {request} como argumento. Fíjate en las llaves. Muchas gracias a @Quentin por su ayuda.