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

GBa*_*oso 5 javascript express passport.js graphql graphql-js

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

const server = express();

server.use('/graphql', bodyParser.json(), graphqlExpress({ schema }));
Run Code Online (Sandbox Code Playgroud)

问题是:如何访问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});
Run Code Online (Sandbox Code Playgroud)

Dan*_*den 10

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

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

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

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