graphql 在sub query 子查询中获取header中

2018-09-24  本文已影响10人  onwingsofsong

以下内容基于graphql-yoga,它是基于apollo graphql server,并整合了

graphql-subscriptions/subscriptions-transport-ws: GraphQL subscriptions server

graphql.js/graphql-tools: GraphQL engine & schema helpers

graphql-playground: Interactive GraphQL IDE

graphql client端将token添加到header中发送到server端,然鹅在graphql server端的子查询中,无法从context中获取任何信息。因为client端发送请求,只有父查询中有context。

以 database与datatable的关系为例:

type Query {

database(id: Int!):Database

datatables:[DataTable!]!

}

type Database{

id: Int

name: String

datatable_list:[DataTable]

}

type DataTable{

id: Int

name: String

}

父查询获取token的方法是:

const datatable=(root, { id },context)=>{

    token=context.request.get('token')

    return fetch(`${baseURL}/datatable/${id}`,{headers: {

        'Content-Type': 'application/json',

        'Accept': 'application/json',

        'wx-token':token,

    }}).then(res => res.json())}

其子查询获取token的方法是:

Database:{

    async datatable_list({ id },context){

        return await fetch(`${baseURL}/database/${id}/datatables`,{headers: {

            'Content-Type': 'application/json',

            'Accept': 'application/json',

            'wx-token':context.request.get('token'),

        }}).then(res => res.json())}

},

通过异步调用,可以共享父查询的context。

上一篇下一篇

猜你喜欢

热点阅读