📅  最后修改于: 2023-12-03 15:31:03.874000             🧑  作者: Mango
在使用 JavaScript 编写 GraphQL 服务器时,我们可以使用 GraphQL Yoga 这个全功能的 GraphQL 服务器,让我们以一种灵活的方式将 GraphQL 与现有的 Node.js 服务器集成在一起,并在其中包含很多有用的功能。
在一些情况下,我们需要访问 HTTP 标头的数据,因为某种原因在 GraphQL Playground 中并不能检索到这些数据。这里将介绍如何使用 GraphQL Yoga 访问 HTTP 标头。
context
在 GraphQL Yoga 中是一个执行 GraphQL 查询时可供访问的关键参数对象。我们可以在 context
中设置相关的 HTTP 上下文元数据。这里包括 request
和 response
。
const { GraphQLServer } = require("graphql-yoga");
const typeDefs = `
type Query {
hello: String!
}
`;
const resolvers = {
Query: {
hello: (_, args, context) => {
const { req } = context.request;
const authorization = req.get("Authorization");
return `Hello! The authorization token is "${authorization}".`;
},
},
};
const server = new GraphQLServer({
typeDefs,
resolvers,
context: (req) => ({ request: req }),
});
server.start(() => console.log(`GraphQL server is running on http://localhost:4000`));
在上述示例代码中,我们将 context
设置为 req
,然后在 hello
resolver 中获取了 Authorization
标头的值。如果你想要获取其他标头信息,只需要更改标头名称即可。
在某些场景下,我们可能需要将自定义 HTTP 头部数据传递给下一步处理程序。为此,我们可以创建自定义 context
对象时,引入其他自定义属性。
const { GraphQLServer } = require("graphql-yoga");
const typeDefs = `
type Query {
hello: String!
}
`;
const resolvers = {
Query: {
hello: (_, args, context) => {
return `Hello! The custom header value is "${context.customValue}".`;
},
},
};
const server = new GraphQLServer({
typeDefs,
resolvers,
context: (req) => ({
request: req,
customValue: req.headers["x-custom-header"],
}),
});
server.start(() => console.log(`GraphQL server is running on http://localhost:4000`));
我们将在 context
中定义一个 customValue
属性,该属性引用 X-Custom-Header
标头的值。
在 hello
resolver 中,我们可以轻松地访问这个自定义标头,例如,获取标头的值时使用 context.customValue
。
这些是一些基本使用 GraphQL Yoga 访问 HTTP 标头的方法。通过灵活使用 context
对象,您可以轻松地访问和处理 HTTP 头部信息。