如何访问 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 的中间件可能以相同的方式运行,但文档不清楚。
最后,上下文作为传递给解析器函数的第三个参数可用。
我有一个使用 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 的中间件可能以相同的方式运行,但文档不清楚。
最后,上下文作为传递给解析器函数的第三个参数可用。