req 在 Apollo Server 上下文中始终未定义

Posted

技术标签:

【中文标题】req 在 Apollo Server 上下文中始终未定义【英文标题】:req always undefined in Apollo Server context 【发布时间】:2019-07-15 02:30:26 【问题描述】:

我对 apollo-server 上下文有疑问。我写了以下代码:

const  ApolloServer  = require("apollo-server-azure-functions");
const  typeDefs, resolvers  = require('../graphql_schema/schema');

const server = new ApolloServer(
    typeDefs,
    resolvers, 
    context: ( req ) => 
      console.log(req);
      return 
        req: req
      
    ,
    introspection: false,
    playground: true,
  );

  module.exports = server.createHandler();

但是 req 变量总是未定义的。 有人有想法吗?

我正在使用以下版本的阿波罗

"apollo-server": "^2.4.2",
"apollo-server-azure-functions": "^2.4.2",

非常感谢。

【问题讨论】:

【参考方案1】:

我有解决问题的办法。

context: ( req ) =>... 

不要解构req,应该是:

context: (req) => ...

const  ApolloServer  = require("apollo-server-azure-functions");
const  typeDefs, resolvers  = require('../graphql_schema/schema');

const server = new ApolloServer(
    typeDefs,
    resolvers, 
    context: (req) => 
      return 
        accesstoken: GetAccessToken(req.request)
      
    ,
    introspection: false,
    playground: true,
  );

  const GetAccessToken = function (request)
    const token = (request.headers.authorization || '').replace('BEARER ', '');
    return token;
  

  module.exports = server.createHandler();

【讨论】:

【参考方案2】:

需要在顶部定义req参数

const  ApolloServer  = require("apollo-server-azure-functions");
const  typeDefs, resolvers  = require('../graphql_schema/schema');

const server = new ApolloServer(
    typeDefs,
    resolvers,
    req,
    context: ( req ) => 
      console.log(req);
      return 
        req: req
      
    ,
    introspection: false,
    playground: true,
  );

  module.exports = server.createHandler();

【讨论】:

以上是关于req 在 Apollo Server 上下文中始终未定义的主要内容,如果未能解决你的问题,请参考以下文章

Express上下文中箭头功能的代码覆盖范围

获取查询/变异操作名称

在 Apollo Server 上下文中获取 NextAuth.js 用户会话

升级到 apollo-server-express 2.0.0 缺少上下文

如何在 Apollo Server 中正确键入上下文对象?

从上下文中获取模型与导入 - apollo server express & mongoose