Как я могу передать объекты экспресс-запроса и ответа в контекст graphql-йоги с помощью функции createYoga?

Я хочу пройти экспрессreqиresобъект для моего контекста, потому что я хочу использоватьexpress-sessionsдля аутентификации на основе сеанса, потому что по умолчаниюrequestsиз контекста не знает о сессиях. Вот что я пробовал

      app.use("/graphql", (req, res) => {
    return createYoga({
      context: ({ params }) => {
        return {
          req,
          params,
          res,
          prisma,
          redis: redisClient,
        };
      },
      graphiql: true,
      landingPage: false,
      cors: false,
      schema,
    });
});

Но если я попробую это, похоже, что запрос не проходит.

1 ответ

Согласно документам , при работе в node.js и экспресс-среде выполнения контекст автоматически будет иметь запрос и ответ.

Контекст сервера

При создании экземпляра сервера GraphQL Yoga принимает дополнительный объект из вашей базовой серверной инфраструктуры или библиотеки, который будет объединен с контекстом по умолчанию. Node.js (автономный, экспресс, Next.js и т. д.)

Если вы используете GraphQL Yoga в качестве автономного сервера с createServer из модуля http(s) или предоставляете его в качестве промежуточного программного обеспечения, как мы показываем в рецептах экспресс-интеграции или Next.js.

       req - Node.js IncomingMessage object
res - Node.js ServerResponse object

Объекты req и res добавляются к исходному объекту контекста.

const serverContext = { ... defaultContext, req, res }

Таким образом, при использовании @graphql-yoga/node можно получить доступ к context.req и context.res в преобразователях GraphQL или в функции фабрики пользовательского контекста.

Однако мы рекомендуем по возможности избегать использования context.req и context.res и вместо этого отдавать предпочтение context.request, поскольку он более ориентирован на будущее и не зависит от платформы (поскольку HTTP-серверы Node.js используют API Fetch Response).

Я попробовал это, и в контексте есть объекты req и res.

Другие вопросы по тегам