Я новичок в Relay, GraphQL и Postgres, и я пытаюсь расширить автоматически сгенерированную схему, которую создает PostGraphile, чтобы включить тип средства просмотра, который является основным продуктом Relay.
Примера из их документов, вероятно, достаточно для большинства людей, но у меня возникли проблемы с его конкретизацией. Я в основном хочу, чтобы он добавлял поле viewer: Viewer!
к каждому типу.
Любая помощь будет потрясающей.
const { makeExtendSchemaPlugin, gql } = require('graphile-utils');
const AddViewerPlugin = makeExtendSchemaPlugin(build => {
// Get any helpers we need from `build`
const { pgSql: sql, inflection } = build;
return {
typeDefs: gql`...`,
resolvers: {
/*...*/
},
};
});
module.exports = AddViewerPlugin;
В моей базе данных есть таблица public.person и таблица private.person_account, но я не решаюсь переименовать один из этих просмотрщиков.
Вы используете объект "postgraphile" для автоматического определения схемы. И используйте «makeExtendSchemaPlugin», чтобы добавить к нему дополнительные преобразователи.
makeExtendSchemaPlugin создает объект плагина, который вы можете передать при построении объекта postgrahile.
Вот выдержка со страницы makeExtendSchemaPlugin в документации postgraphile:
const { postgraphile } = require("postgraphile");
const { makeExtendSchemaPlugin, gql } = require("graphile-utils");const express = require("express");
const { convertUsdToAud } = require("ficticious-npm-library");
const MyForeignExchangePlugin = makeExtendSchemaPlugin(build => { return { typeDefs: gql` extend type Product { priceInAuCents: Int! @requires(columns: ["price_in_us_cents"]) } `, resolvers: { Product: { priceInAuCents: async product => { // Note that the columns are converted to fields, so the case changes // from `price_in_us_cents` to `priceInUsCents` const { priceInUsCents } = product; return await convertUsdToAud(priceInUsCents); }, }, }, };});
const app = express();
app.use(
postgraphile(process.env.DATABASE_URL, ["app_public"], {
graphiql: true,
appendPlugins: [MyForeignExchangePlugin], })
);
app.listen(3030);