TypeGraphQL: @Arg Type Error при использовании класса GraphQL, импортированного из локального пакета - PullRequest
0 голосов
/ 25 октября 2019

Я создал локальный пакет с несколькими объектами. этот пакет предназначен для установки через npm в других программах, чтобы использовать общее библиотека объектов. Среди них я создал простой класс для создания AppoloServer, который будет использоваться с сущностями, типами и определителями TypeGraphQL:

export class ClsApolloGraphQlServer {
    private _resolvers: any[];
    private _connection: Connection;

    constructor(
        resolvers: any[],
        connection: Connection,
    ) {
        this._resolvers = resolvers;
        this._connection = connection;
    }

    public async initApolloServer(
        app: express.Application,
        corsOpt: cors.CorsOptions
    ): Promise<ApolloServer> {
            const {
                typeDefs,
                resolvers,
            } = await buildTypeDefsAndResolvers({
                resolvers: this._resolvers,
            });

            const schema = makeExecutableSchema({
                typeDefs,
                resolvers,
            });

            addSchemaLevelResolveFunction(
                schema,
                (_, __, context) =>
                    !!getSession(context, this._SESSION_TYPE)
            );

            const apolloServer: ApolloServer = new ApolloServer({
                schema,
                context: ({
                    req,
                    res,
                }: {
                    req: Request;
                    res: Response;
                }): IGlobalContext => {
                    return {
                        req,
                        res,
                        dbConnection: this._connection,
                    };
                },
                formatError: (err: GraphQLError) =>
                    FormatErrorMessageGraphQlServer(err),
            });

            apolloServer.applyMiddleware({ app, cors: corsOpt });

            return apolloServer;

    }
}

Дублирование этого кода в одной из конечных программ и импорт класса из этой окончательной версииПрограмма работает нормально.

Однако импорт класса в конечной программе после установки общей библиотеки приводит к сбою TypeGraphQL с ошибкой "Cannot determine GraphQL input type for start".

Ниже приведен пример распознавателя, которыйпадает, и тип определен для Arg, так как 'start' является аргументом распознавателей для управления нумерацией страниц.

Не знаю, что не так. Просто упомяну, что я импортирую 'рефакт-метаданные' в файл определения класса в библиотеке, а также в самом начале финальной программы.

Resolver

@Query(() => [objectTypeCls], { name: `getAll${suffix}` })
        async getAll(
            @Ctx() context: IGlobalContext,
            @Args() { start, nbRecords }: PaginationArgs
        ): Promise<TExposeApi[]> {

            if (context.dbConnection && context.dbConnection.isConnected) {
                const resu: TExposeApi[] = await context.dbConnection
                    .getRepository<TExposeApi>(objectTypeCls)
                    .createQueryBuilder(suffix)
                    .skip(start)
                    .take(nbRecords)
                    .getMany();
                return resu;
            } else return [];
        }

ArgType

@ArgsType()
export class PaginationArgs {
    @Field(() => Int)
    start: number;

    @Field(() => Int)
    nbRecords: number;
}

1 Ответ

0 голосов
/ 25 октября 2019

Вы должны использовать репозиторий пакетов для связанных артефактов или lerna monorepo с подъемом зависимостей. В вашем случае вы просто связываете пакеты, но они разделили пакет graphql в своих node_modules, что вызывает конфликт, где Int !== Int между graphql экземплярами пакетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...