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

Posted

技术标签:

【中文标题】升级到 apollo-server-express 2.0.0 缺少上下文【英文标题】:upgrading to apollo-server-express 2.0.0 context missing 【发布时间】:2019-01-21 23:07:00 【问题描述】:

升级前我们有

import express from 'express';
import  graphqlExpress, graphiqlExpress  from 'apollo-server-express';

const app = express();

app.use(
   '/graphql',
   bodyParser.json(),
   graphqlExpress(req => (
   schema,
   tracing: true,
   context:  req ,
 )),
);

app.use(
 '/graphiql',
 graphiqlExpress(
   endpointURL: '/graphql',
 ),
);

在我们的解析器中,我们可以得到 req 并设置 req.session.token 如下,

const customResover = 
Query: 
   custom: async (root, args, context) => 
   console.log(' resolver called with args', args);
   const  req  = context;  
   ... fetch token info and set 
   req.session.token = $token;
   ...

但随着升级到 2.0.0 版,代码更改为以下代码,我不确定如何修复 CustomResolver,设置会话令牌,知道如何完成上述操作吗?

import express from 'express';
import  ApolloServer, gql  from 'apollo-server-express';
import  typeDefs, resolvers  from './schema/';

const app = express();
const apollo = new ApolloServer(
   typeDefs
   resolvers,
   engine: false
);

apollo.applyMiddleware(
   app,
);

【问题讨论】:

【参考方案1】:

https://www.apollographql.com/docs/apollo-server/migration-two-dot.html#request-headers

const apollo = new ApolloServer(
  typeDefs
  resolvers,
  context: ( req ) => ( req )
  engine: false
);

解决了,但是 Cookie 出现问题,令牌无法进入浏览器。

【讨论】:

以上是关于升级到 apollo-server-express 2.0.0 缺少上下文的主要内容,如果未能解决你的问题,请参考以下文章

使用 apollo-server-express 迁移到 3.5.0

在 apollo-server-express 中增加身体限制大小

无法从 apollo-server-express 导入 SchemaDirectiveVisitor

apollo-server-express:如何解决内部订阅问题?

Apollo-Server-Express 未收到上传对象

Apollo-server-express 内省已禁用,但仍然可以通过 websocket 连接