Maison >développement back-end >Golang >'Le corps json ne peut pas être décodé : EOF' après avoir essayé de lire le corps de la requête

'Le corps json ne peut pas être décodé : EOF' après avoir essayé de lire le corps de la requête

PHPz
PHPzavant
2024-02-09 10:20:19661parcourir

尝试读取请求正文后出现“json 正文无法解码:EOF”

Dans le développement PHP, nous rencontrons souvent divers problèmes et erreurs. L'un des problèmes courants est l'erreur « Le corps json ne peut pas être décodé : EOF » lors de la tentative de lecture du corps de la requête. Ce message d'erreur signifie qu'une fin de fichier inattendue a été rencontrée lors du décodage du corps de la requête JSON. En règle générale, ce problème peut être résolu par un simple débogage et dépannage. Dans cet article, nous discuterons des causes possibles de ce problème et proposerons quelques solutions pour vous aider à résoudre cette erreur.

Contenu de la question

J'ai écrit un middleware d'enregistrement qui stocke les informations de requête graphql entrantes. Le problème est que si j'essaie de lire le corps de la requête, j'obtiens les 400 mauvaises requêtes suivantes :

{
    "errors": [
        {
            "message": "json body could not be decoded: eof"
        }
    ],
    "data": null
}

Mon code :

clonedReq := r.Clone(ctx)
data, _ := io.ReadAll(clonedReq.Body)

// store the data...
fmt.Println(string(data))

Les données sont affichées, mais j'obtiens ensuite une erreur eof. Si je commente cette partie, la demande reçoit une réponse sans aucun problème.

Le problème reste de savoir si vous utilisez ou non clone pour demander une copie complète.

Solution

Le middleware lit le corps de la requête dans eof. Le gestionnaire a rencontré eof. Le contenu du corps de la requête n'est pas cloné dans clone().

Pour corriger le code, restaurez le corps de la requête dans le middleware :

data, _ := io.ReadAll(r.Body)
  r.Body = io.NopCloser(bytes.NewReader(data))

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer