Estoy creando una aplicación web que debe obtener datos bursátiles específicos para las acciones elegidas por el usuario de Yahoo Finance y luego enviar estos datos a un servidor Node/Express.
PROBLEMA: Todo funciona, excepto que lo que recibe Node/Express son los valores nulos originales en el objeto de JavaScript y no los valores recibidos de Yahoo Finance.
Las definiciones de variables de objetos iniciales se realizan primero en index.js:
const stockData = { ticker: "", name: "", dateAdd: 0, priceDateAdd: 0, priceNow: 0, movement: 0 };El método de publicación se define:
const options = { method: 'POST', body: JSON.stringify(stockData), headers: { "Content-Type": "application/json" }Frontend, el usuario ahora elige un ticker y se envía una solicitud a la API de Finanzas de Yahoo para obtener valores reales para el objeto stockData para ese ticker. No hay problemas allí. Por ejemplo, para stockData.priceDateAdd, la consola del navegador devuelve el valor 67 para una acción de muestra.
Ahora se ejecuta una función para enviar los valores obtenidos de Yahoo Finance a Node/Express:
async function sendData() { const response = await fetch('/add', options); const serverData = await response.json(); console.log(serverData);PERO... la respuesta de Node/Express muestra los valores nulos originales del objeto, no los obtenidos de Yahho Finance, es decir, esta es la respuesta:
{ ticker: '', name: '', dateAdd: 0, priceDateAdd: 0, priceNow: 0, movement: 0 }Ejecuto un segundo navegador console.log después de la respuesta del servidor, y sigue mostrando el valor correcto de stockData.priceDateAdd como 67.
Pero por alguna razón, el servidor recibe los valores nulos originales. He pasado horas y no puedo resolverlo. Aquí está la esperanza de ayuda.
Después de más pruebas y errores, he respondido mi propia pregunta:
Moví la definición constante dentro de la función que se llama para enviar los datos, y funcionó. Así que el código es ahora:
async function sendData() { const options = { method: 'POST', body: JSON.stringify(stockData), headers: { "Content-Type": "application/json" } }; const response = await fetch('/add', options); const serverData = await response.json(); console.log(serverData); }