如何在GraphQL解析器中访问请求对象(使用Apollo-Server-Express)

时间:2017-09-09 21:56:54

标签: javascript express passport.js graphql graphql-js

我有一个使用GraphQL的标准快递服务器

const server = express();

server.use('/graphql', bodyParser.json(), graphqlExpress({ schema }));

问题是:如何访问解析器中的request对象?我想在一些特定的查询中检查JWT

这是导入的架构:

const typeDefs = `
    type User {
        id: String,
        name: String,
        role: Int
    }
    type Query {
        user(id: String): User,
        users: [User]
    }
`;

const resolvers = {
    Query: {
        user: (_, args, context, info) => users.find(u => u.id === args.id),
        users: (_, args, context, info) => users
    }
}

module.exports = makeExecutableSchema({typeDefs, resolvers});

1 个答案:

答案 0 :(得分:10)

应通过上下文访问请求对象。您可以修改传递给graphqlExpress中间件的选项以定义您的上下文,如下所示:

server.use('/graphql', bodyParser.json(), graphqlExpress(req => ({
  schema,
  context: { user: req.user }
}))

我知道express-graphql实际上使用请求作为上下文,如果它没有在选项中定义 - Apollo的中间件可能会以相同的方式运行,但文档不清楚。

最后,上下文可用作传递给解析器函数的第三个参数。