У меня есть postgraphile, работающий на экспресс-сервере (как библиотека)
export const postGraphileServer = () => {
return postgraphile(process.env.DB_DSN, 'public', options);
};
Выражать:
app.use(postGraphileServer());
Используя плагин для самоанализа codegen, я генерирую graphql.schema.json
, и все работает правильно, когда доступ к GQL осуществляется извне через http-ссылку.
yml-фрагмент:
packages/graphql/src/generated/graphql.schema.json:
plugins:
- 'introspection'
У меня есть вариант использования для предоставления конечной точки REST на экспресс-сервере, который будет принимать полезную нагрузку и создавать строку в Postgres. Что я хотел бы сделать, так это получить доступ к Postgraphile напрямую (без сетевого перехода), чтобы избежать аутентификации - я считаю, что использую только схему
Из того, что я читал, это можно сделать через SchemaLink
. Я пробовал что-то вроде:
const clientSchema = buildClientSchema(schema as unknown as IntrospectionQuery);
// Make executable schema from client schema
const executableSchema = makeExecutableSchema({
typeDefs: clientSchema,
});
return (this.#_apolloClient = new ApolloClient({
ssrMode: true,
link: new SchemaLink({ schema: executableSchema }),
cache: new InMemoryCache(),
}));
Где schema
— это сгенерированный codegen файл graphql.schema.json
. Я считаю, что проблема, которая у меня есть, заключается в том, что мне также нужно передать распознаватели makeExecutableSchema
, чтобы Postgraphile знал, как запрашивать/мутировать - в настоящее время он молча терпит неудачу, но ничего не делает.
Я на правильном пути и есть ли способ получить доступ к сгенерированным распознавателям из postgraphile (или мне нужно вручную создать их для этого конкретного случая использования?)
Спасибо! Я думаю, что это дает мне то, что мне нужно. Я обновлю ответ, как только у меня будет очищенный образец
Итак, с помощью Бенджи я смог заставить это работать, используя GraphileApolloLink.ts
. Поскольку эта ссылка захватывает контекст и схему из самого промежуточного программного обеспечения, нет необходимости пытаться построить схему из schema.graphql.json
файла самоанализа.
Мои требования немного отличались, поэтому я убрал проверку мутации внутри GraphileApolloLink.ts
.
Для полноты мне удалось инициализировать ApolloClient
просто
get #apolloClient(): ApolloClient<NormalizedCacheObject> {
if (this.#_apolloClient) {
return this.#_apolloClient;
}
const _link = new GraphileApolloLink({
req: this.request,
res: this.response,
// Getter for the middleware object passed into Express
postgraphileMiddleware: postGraphileMiddleware(),
});
return (this.#_apolloClient = new ApolloClient({
ssrMode: true,
link: _link,
cache: new InMemoryCache(),
}));
}
И запросите данные успешно, используя запросы/мутации, сгенерированные codegen, как и ожидалось.
Это может помочь: github.com/graphile/starter/blob/main/%40app/lib/src/…