Как я могу передать объекты экспресс-запроса и ответа в контекст 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).