📜  graphql yoga 访问 http 标头 - Javascript (1)

📅  最后修改于: 2023-12-03 15:31:03.874000             🧑  作者: Mango

使用 GraphQL Yoga 访问 HTTP 标头 - JavaScript

在使用 JavaScript 编写 GraphQL 服务器时,我们可以使用 GraphQL Yoga 这个全功能的 GraphQL 服务器,让我们以一种灵活的方式将 GraphQL 与现有的 Node.js 服务器集成在一起,并在其中包含很多有用的功能。

在一些情况下,我们需要访问 HTTP 标头的数据,因为某种原因在 GraphQL Playground 中并不能检索到这些数据。这里将介绍如何使用 GraphQL Yoga 访问 HTTP 标头。

设置 HTTP 上下文

context 在 GraphQL Yoga 中是一个执行 GraphQL 查询时可供访问的关键参数对象。我们可以在 context 中设置相关的 HTTP 上下文元数据。这里包括 requestresponse

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 上下文

在某些场景下,我们可能需要将自定义 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 头部信息。