2016-05-19 7 views
5

Ich versuche gerade, den Anfragetext in den Kontext zu bringen, weil ein Teil des Hauptteils eine JWT enthält, die entschlüsselt werden muss. Allerdings, wenn ich die folgende versuchen ich nicht definiert für Kontext:Wie übergebe Anfrage Körper in GraphQL Kontext?

app.use('/', graphqlHTTP((req) => ({ 
     schema: Schema, 
     context: req.body, 
     pretty: true, 
     graphiql: false 
    }))); 

I req abgemeldet und ich habe nicht Körper dort sehen. Ich bin eine Bibliothek mit react-reach genannt, fügt es die folgenden, um den Körper auf der Anfrage:

{ 
     query: {...}, 
     queryParams: {...}, 
     options: { 
     token: '...' // <-- I'm passing the token into options 
     } 
    } 

Ich weiß, dass der Körper interpretiert wird, weil meine Fragen/Mutationen, die im Körper interpretiert und ausgeführt werden. Ich kann es einfach nicht finden, wenn es an den Kontext weitergegeben wird.

+2

Ich fühle mich wie es ist viel einfacher, wenn Sie das Token in eine Kopfzeile setzen, dann können Sie es so machen: http://docs.apollostack.com/apollo-server/tools.html#auth-tokens (Apollo Server ist nur ein dünner Wrapper um Express-GraphQL) – stubailo

+0

Ill ausprobieren, @stubailo –

+0

Das hat @stubailo funktioniert –

Antwort

2

Ihr req.body ist undefined, es sei denn, Sie verwenden zusätzliche Body-Parser-Middleware. Von der Express-Dokumentation:

req.body

Enthält Schlüssel-Wert-Paare von Daten im Anforderungstext vorgelegt. Standardmäßig ist es nicht definiert und wird ausgefüllt, wenn Sie Body-Parsing-Middleware wie body-parser und multer verwenden. http://expressjs.com/en/api.html#req.body

graphqlHTTP ist seine eigene Sache tut die Anfrage Körper (siehe here) und deshalb Ihre Anfragen/Mutationen arbeiten zu analysieren.

Das Hinzufügen von Middleware (wie body-parser oder multer) zum Analysieren des Anfragetexts sollte es unter req.body verfügbar machen und dann sollte Ihr Kontext mit dem gefüllt werden, wonach Sie suchen.