Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

273
Views
Intentando registrar la respuesta JSON de la API REST en JavaScript usando Fetch

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:

  • ¿Es necesario definir la respuesta? Obviamente, me están gritando porque no lo es.
  • ¿Hay alguna manera de ver si obtengo algo de la API de forma automática?

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.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

devolver repsonse.text() debe ser ----> devolver respuesta.text()

De acuerdo con Fetch Documentation

  • "La interfaz de respuesta de Fetch API representa la respuesta a una solicitud. Puede crear un nuevo objeto de respuesta utilizando el constructor Response.Response(), pero es más probable que encuentre un objeto de respuesta devuelto como resultado de otra operación de API —por ejemplo, un trabajador de servicio Fetchevent.respondWith, o un simple fetch().

Para su pregunta "¿Hay alguna manera de ver si obtengo algo de la API de forma automática?"

  • 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.

about 4 years ago · Juan Pablo Isaza Report

0

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

about 4 years ago · Juan Pablo Isaza Report

0

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:

  1. Mueva el console.log(response.access_token); dentro de la cláusula .then

O una solución más limpia y moderna sería:

  1. Use 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); ...
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!