我有一个使用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});
答案 0 :(得分:10)
应通过上下文访问请求对象。您可以修改传递给graphqlExpress中间件的选项以定义您的上下文,如下所示:
server.use('/graphql', bodyParser.json(), graphqlExpress(req => ({
schema,
context: { user: req.user }
}))
我知道express-graphql
实际上使用请求作为上下文,如果它没有在选项中定义 - Apollo的中间件可能会以相同的方式运行,但文档不清楚。
最后,上下文可用作传递给解析器函数的第三个参数。