如何在 apollo-server 4 中传递上下文值?

问题描述 投票:0回答:1

在 apollo-server 3 中,我可以像这样在创建 apollo 服务器时设置上下文:

const server = new ApolloServer({
    debug: true,
    schema: executableSchema,
    context: contextFunction(secretValues),
...

我的

contextFunction
看起来像这样:

export const contextFunction =
  (secretValues: AwsSecretValues) =>
  async ({ req, res }: ExpressContext) => {
    const sessionId = extractSessionIdFromCookies(req.headers.cookie);
    const session = await validateSession(
      sessionId || req.headers.authorization,
    );

    if (session) {
      session.set({ expiresAt: Date.now() + DEFAULT_SESSION_EXTEND_TIME });
      await session.save();

      generateCookie(session._id, res);
    }

    return {
      pubsub,
      dataLoaders: dataLoaderFactory(),
      session,
      req,
      res,
      secretValues,
    };
  };

这很有用,因为我不必在每个解析器上独立刷新会话,并且每个解析器都有它的最新版本,而且我还能够传递一堆其他有用的东西。

正如我所见,在 apollo-server 4 中没有此选项。但是,如果您无法设置上下文(除了将内容向下钻取到子解析器),上下文的全部意义是什么?一定有办法,但找不到方法。

express graphql apollo apollo-server
1个回答
0
投票

in the docs所述,定义相同的新方法是:

app.use(
  // A named context function is required if you are not
  // using ApolloServer<BaseContext>
  expressMiddleware(server, {
    context: async ({ req, res }) => ({
      token: await getTokenForRequest(req),
    }),
  }),
);

© www.soinside.com 2019 - 2024. All rights reserved.