Heim  >  Artikel  >  Backend-Entwicklung  >  „JSON-Text kann nicht dekodiert werden: EOF“ nach dem Versuch, den Anforderungstext zu lesen

„JSON-Text kann nicht dekodiert werden: EOF“ nach dem Versuch, den Anforderungstext zu lesen

PHPz
PHPznach vorne
2024-02-09 10:20:19620Durchsuche

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

Bei der PHP-Entwicklung stoßen wir häufig auf verschiedene Probleme und Fehler. Eines der häufigsten Probleme ist der Fehler „JSON-Body kann nicht dekodiert werden: EOF“, wenn versucht wird, den Anfragetext zu lesen. Diese Fehlermeldung bedeutet, dass beim Dekodieren des JSON-Anfragetexts ein unerwartetes Dateiende aufgetreten ist. Normalerweise kann dieses Problem durch einfache Fehlerbehebung und Fehlerbehebung behoben werden. In diesem Artikel besprechen wir die möglichen Ursachen dieses Problems und bieten einige Lösungen an, die Ihnen bei der Behebung dieses Fehlers helfen.

Frageninhalt

Ich habe eine Logger-Middleware geschrieben, die eingehende Graphql-Anforderungsinformationen speichert. Das Problem ist, dass ich, wenn ich versuche, den Anfragetext zu lesen, die folgende 400 fehlerhafte Anfrage erhalte:

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

Mein Code:

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

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

Die Daten werden angezeigt, aber dann erhalte ich einen EOF-Fehler. Wenn ich diesen Teil auskommentiere, wird die Anfrage ohne Probleme beantwortet.

Das Problem bleibt bestehen, unabhängig davon, ob Sie clone verwenden, um eine tiefe Kopie anzufordern.

Lösung

Middleware liest den Anforderungstext an eof. Handler ist auf EOF gestoßen. Der Inhalt des Anfragetextes wird in clone() nicht geklont.

Um den Code zu reparieren, stellen Sie den Anforderungstext in der Middleware wieder her:

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

Das obige ist der detaillierte Inhalt von„JSON-Text kann nicht dekodiert werden: EOF“ nach dem Versuch, den Anforderungstext zu lesen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen