【问题标题】:How can I get header for node graphql resolver without express?如何在没有 express 的情况下获取节点 graphql 解析器的标头?
【发布时间】:2019-12-13 12:10:20
【问题描述】:

我知道在express中,我们可以有request.header,但是没有express,我怎么能得到header呢?

我正在开发 Apollo 解析器,我正在尝试在我的 graphql 解析器中使用标题。

  async item (_, args, context) {
    if (ApiVersion === '2') {
      return await itemv2(args);
    }
    return await itemv1(args);
  },

【问题讨论】:

  • 不清楚您所说的“没有快递”是什么意思。你在运行 GraphQL Yoga 吗? Apollo Server 的独立版本?请提供更多详细信息。
  • 它是 Apollo 服务器。

标签: node.js graphql apollo-server


【解决方案1】:

作为shown in the docs,传递给ApolloServer 的构造函数的context 参数可以是对象或函数。如果它是一个函数,它应该返回上下文对象或将解析为一个的 Promise。该函数通过req 属性作为其第一个参数传递一个对象。这是一个明确的request 对象,因为这就是 Apollo Server 在后台使用的。您可以访问此对象上通常可用的任何属性,包括标题:

new ApolloServer({
  typeDefs,
  resolvers,
  context: ({ req }) => {
    console.log(req.headers.authorization)

    return req
  },
})

因此,如果您使用整个 req 对象作为上下文,您可以执行以下操作:

  async item (_, args, context) {
    if (context.headers['api-version'] === '2') {
      return await itemv2(args);
    }
    return await itemv1(args);
  },

【讨论】:

    猜你喜欢
    • 2019-09-28
    • 2019-02-04
    • 2018-07-07
    • 2017-11-05
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 2021-12-19
    • 2021-04-19
    相关资源
    最近更新 更多