2016-05-19 21 views
5

Attualmente sto tentando di ottenere il corpo della richiesta nel contesto, poiché parte del corpo contiene un JWT che deve essere decodificato. Tuttavia quando provo il seguente ricevo non definito per il contesto:Come passare il corpo della richiesta nel contesto GraphQL?

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

mi sono collegato fuori req e non ho visto il corpo in là. Sto utilizzando una libreria chiamata react-reach, si aggiunge quanto segue per il corpo sulla domanda:

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

So che il corpo viene interpretata, perché le mie domande/mutazioni che sono nel corpo vengono interpretati ed eseguiti. Semplicemente non riesco a trovarlo quando viene passato al contesto.

+2

Mi sembra molto più semplice se si inserisce il token in un'intestazione, quindi è possibile farlo in questo modo: http://docs.apollostack.com/apollo-server/tools.html#auth-tokens (Apollo Server è solo un sottile involucro attorno a Express-GraphQL) – stubailo

+0

Lo provo, @stubailo –

+0

Che ha funzionato @stubailo –

risposta

2

Il numero req.body è undefined a meno che non si stia utilizzando un middleware aggiuntivo per l'analisi del corpo. Dalla documentazione espresso:

req.body

Contiene coppie chiave-valore di dati presentati nel corpo della richiesta. Per impostazione predefinita, non è definito e viene popolato quando si utilizza il middleware di analisi del corpo, ad esempio body-parser e multer. http://expressjs.com/en/api.html#req.body

graphqlHTTP sta facendo di essa la propria cosa per analizzare il corpo della richiesta (vedi here) ed è per questo che le vostre domande/mutazioni stanno lavorando.

L'aggiunta di middleware (come body parser o multer) per analizzare il corpo della richiesta dovrebbe renderla disponibile su req.body e quindi il contesto dovrebbe essere popolato con quello che stai cercando.