Relire un corps de réponse à partir de JavaScript de chercher

fetch() retourne promesse qui (en cas de succès) correspond à un Réponse objet. Un très fréquent chose à faire est d'appeler immédiatement Réponse.json() pour convertir le corps de la réponse à un objet JSON.

Si le corps de la réponse n'est pas valide JSON, puis le Response.json() promesse échoue avec une erreur. Le message est quelque chose le long des lignes de:

Jeton inattendu X en JSON à la position 0

Ce n'est pas très utile lorsque vous essayez de diagnostiquer le problème; idéalement, je voudrais être en mesure de voir le contenu à partir du serveur (ce qui est souvent un message d'erreur).

Cependant, il semble que vous ne pouvez lire le flux à Response.body une fois (au moins dans Chrome). (Il y a même un en lecture seule Réponse.bodyUsed drapeau.) Qui a déjà eu lieu lors de la Response.json() essaie de convertir le corps en JSON, de sorte que le corps semble être perdu pour toujours dans le cas d'un JSON échec d'analyse.

Est-il un moyen de récupérer l'original de la réponse du corps... bref de lecture manuelle (et puis de les convertir en JSON) lorsque l'original fetch Promesse résout?

Vous pourriez l'appeler response.text() au lieu de lire les données renvoyées même si ce n'est pas JSON valide, et vous pouvez cloner une réponse, mais, idéalement, votre serveur doit être toujours de retour JSON lorsque vous vous y attendez JSON, même les erreurs doivent être retournés sous forme de JSON.

OriginalL'auteur Craig Walker | 2016-11-08