Tengo un pequeño guión que he elaborado. El script hace lo siguiente:
Define varias variables dentro de una matriz
Pasa esos valores a una API
La API debe devolver un token de acceso
const fetch = require('node-fetch'); var orgInfo = { client_id: 'idgoeshere', client_secret: 'secretgoeshere', username: 'usernamegoeshere', password: 'passwordgoeshere', grant_type: 'granttypegoeshere' }; fetch('https://urlgoeshere', { method: "GET", body: JSON.stringify(orgInfo), headers: { "Content-Type": "application/json" }, credentials: "include" }).then(function(response) { response.access_token response.bearer response.expires_in response.scope return repsonse.text() }, function(error) { error.message }) console.log(orgInfo); console.log(response.access_token);Cuando registro orgInfo, obtengo el siguiente resultado:
{ client_id: 'idgoeshere', client_secret: 'secretgoeshere', username: 'usernamegoeshere', password: 'passwordgoeshere', grant_type: 'granttypegoeshere' }Cuando intento registrar response.access_token, aparece un error de referencia: la respuesta no está definida
Mis preguntas son:
No estoy buscando a alguien que me dé una respuesta con cuchara, sino que simplemente estoy buscando un empujón en la dirección correcta. Eso sería estelar.
Gracias
ACTUALIZAR
Así que esto es lo que tengo:
const fetch = require('node-fetch'); const orgInfo = { client_id: ' ', client_secret: ' ', username: ' ', password: ' ', grant_type: ' ' }; (async() => { const response = await fetch('https:// ', { method: "GET", body: JSON.stringify(orgInfo), headers: { "Content-Type": "application/json" } }); const data = await response.json(); console.log(data) })Esto no devuelve errores cuando se ejecuta, pero tampoco devuelve el valor de los datos.
De acuerdo con Fetch Documentation
Puede intentar usar console.log(response.status); que le dará el código de estado de su solicitud. Estos códigos se pueden encontrar AQUÍ . Y un ejemplo de esto se utiliza AQUÍ .
Recomiendo encarecidamente intentar usar Postman o Thunder-client si puede, lo que simplifica todo esto y le brinda todo lo que necesita saber sobre la respuesta. Es muy útil para probar las llamadas a la API y saber exactamente qué está pasando. También tienes la posibilidad de ver tu llamada escrita en otros idiomas automáticamente.
const fetch = require('node-fetch'); var orgInfo = { client_id: 'idgoeshere', client_secret: 'secretgoeshere', username: 'usernamegoeshere', password: 'passwordgoeshere', grant_type: 'granttypegoeshere' }; fetch('https://urlgoeshere', { method: "GET", body: JSON.stringify(orgInfo), headers: { "Content-Type": "application/json" }, credentials: "include" }).then(function(response) { response.access_token response.bearer response.expires_in response.scope console.log(response.access_token); return repsonse.text() }, function(error) { error.message }) console.log(orgInfo);la respuesta está dentro del alcance de la función llamada por el método entonces, por lo que solo es accesible dentro de esta función
fetch devuelve un objeto Promise .
Una Promise representa la eventual finalización (o falla) de una operación asincrónica y su valor resultante. Eso significa que solo se garantiza que response.access_token tenga un valor (si lo hay) dentro del bloque .then , ya que la response solo se evalúa cuando se ha cumplido la promesa.
La razón por la que no obtiene nada en la consola es que está tratando de acceder a access_token cuando no se garantiza que tenga un valor (y, por lo tanto, console.log no genera nada, no hay nada que generar ).
Para solucionar esto, debe acceder a la propiedad access_token cuando tenga la garantía de obtener una respuesta.
Eso es después de que se haya cumplido la promesa, así que:
console.log(response.access_token); dentro de la cláusula .thenO una solución más limpia y moderna sería:
await (azúcar sintáctico equivalente) NB El objetoResponse es la representación de toda la respuesta HTTP.
Está utilizando response.text() que analizará el cuerpo de la respuesta como una cadena , no como un objeto JS con propiedades .
Supongo que desea analizar el contenido del cuerpo del objeto de Response como JSON en un objeto JS. En ese caso, use el método json() que luego devolverá una segunda promesa que se resuelve con el objeto JavaScript obtenido del análisis del cuerpo de la respuesta.
El resultado debe tener la propiedad access_token que desea (considerando que el extremo de la API lo devuelve).
Esto debería funcionar:
const response = await fetch('https://urlgoeshere', { method: "GET", body: JSON.stringify(orgInfo), headers: { "Content-Type": "application/json" }; const data = await response.json(); console.log(data.access_token); console.log(data.bearer); console.log(data.expires_in); console.log(data.scope); ...