2017-09-11 2 views
0

J'ai une application React JS qui essaie de se connecter à une API basée sur des jetons (que je développe également, en utilisant Laravel 5.5 et Laravel Passport). J'essaie de mettre en œuvre le login de base (connexion en utilisant un nom d'utilisateur et mot de passe, recevoir un jeton du serveur une fois vérifié, utiliser ce jeton pour les requêtes futures).Réaction JS Fetch renvoie une réponse vide mais Postman ne fonctionne pas

Le code que je utilise fetch est ci-dessous:

function loginApi(username, password) { 
    return fetch(loginUrl, { 
     method: 'POST', 
     headers: { 
      'Content-Type': 'application/json', 
     }, 
     body: JSON.stringify({ 
      grant_type: 'password', 
      client_id: clientId, 
      client_secret: clientSecret, 
      username: username, 
      password: password 
     }) 

    }).then(handleApiErrors) 
    .then(response => response.json) 
} 

Il convient de noter qu'il est pas entièrement complète, comme je suis actuellement juste essayer de déterminer la réponse Je reviens.

J'ai déjà résolu les problèmes normaux que l'on rencontre, comme les problèmes CORS, mais le problème que je rencontre maintenant est que la réponse de l'API est juste ... vide. Même dans l'onglet Réseau des outils de développement de Chrome, si j'examine directement la demande, la réponse est vide.

dev tools 1

dev tools 2

Cependant, si je fais la même requête exacte avec Postman, les résultats sont exactement ce que je pense.

postman

Quel pourrait être le problème ici? Pourquoi la même requête retournerait-elle des résultats différents?

Répondre

5

.json est une fonction qui doit être appelée. Essayez ..

.then(response => response.json()) 

Vous renvoyez actuellement la fonction d'analyse .json.

+0

D'oh! Merci, c'était tout. Je suis curieux cependant: pourquoi invoquer cette fonction change la réponse du serveur? Pour mon esprit de nouveau-à-Réagir, la réponse du serveur devrait être la même, non? La seule différence étant comment est-il alors compris par l'application? Pourquoi afficher la réponse dans l'onglet réseau serait vide? – CGriffin

+0

@PeregrineStudios vous ne modifiez pas la réponse du serveur. Rappelez-vous que 'fetch' est maintenant une API native du navigateur. Vous pensez peut-être à un appel AJAX que le navigateur reçoit et renvoie, mais la manière dont vous le formatez est votre affaire. Mais avec Fetch, toute la chaîne de promesses fait partie de l'appel de l'API. Il a "récupéré" l'appel correctement (les journaux de votre serveur devraient le montrer) mais ne l'a pas montré dans la console du développeur parce que le navigateur interprète l'ensemble de l'appel 'fetch', pas seulement la demande de fil. –