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

How to access the request object inside a GraphQL resolver (using Apollo-Server-Express)

我有一个使用 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});

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

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

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

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