`__typename`, возвращаемый сервером, не соответствует схеме graphql

Когда я создаю схему, используя type-graphql, создаю сервер с помощью apollo-server-lambda и развертываю его на netlify functions, что-то происходит не так.

схема создана type-graphql

# -----------------------------------------------
# !!! THIS FILE WAS GENERATED BY TYPE-GRAPHQL !!!
# !!!   DO NOT MODIFY THIS FILE BY YOURSELF   !!!
# -----------------------------------------------

type Project {
  name: String!
  summary: String!
  titleAndSummary: String!
}

type Query {
  projects: [Project!]!
}

Проблема

Я думаю, когда я запрашиваю API

{
  __schema {
    types {
      name
    }
  }
}

API должен отвечать как

{
    "data": {
        "__schema": {
            "types": [
                {
                    "name": "Query"
                },
                {
                    "name": "Project"
                },
                // ...
            ]
        }
    }
}

Но я получил

{
    "data": {
        "__schema": {
            "types": [
                {
                    "name": "Query"
                },
                {
                    "name": "a"
                },
                // ...
            ]
        }
    }
}

Я собираюсь использовать graphql с Elm-Graphql тем, что модули автоматически генерируются, используя их свойство __typename. Вот почему я должен исправить вышеуказанную проблему.

Я изо всех сил пытаюсь решить эту проблему, но даже не могу найти, в чем проблема. Кажется, в type-graphql или apollo-server или даже netlify functions (я пробовал как netlify dev server, так и реальный сервер с реальным развертыванием)

Коды

graphql.ts

import 'reflect-metadata';
import { ApolloServer } from 'apollo-server-lambda';
import { buildSchemaSync } from 'type-graphql';
import { QueryResolver, ProjectResolver } from './resolver';

const schema = buildSchemaSync({
  resolvers: [QueryResolver, ProjectResolver],
});

const server = new ApolloServer({
  schema,
  debug: false,
});

export const handler = server.createHandler();

типы.ts

import { ObjectType, Field } from 'type-graphql';

@ObjectType()
export class Query {
  @Field((type) => [Project!]!)
  projects!: Project[];
}

@ObjectType()
export class Project {
  @Field((type) => String!)
  name!: string;

  @Field((type) => String!)
  summary!: string;
}

резольвер.ts

import { Resolver, Query, FieldResolver, Root } from 'type-graphql';
import { Project } from './types';
import { projectList } from '../../db/fakeDB';

@Resolver()
export class QueryResolver {
  @Query((returns) => [Project])
  projects() {
    return projectList;
  }
}

@Resolver((of) => Project)
export class ProjectResolver {
  @FieldResolver((returns) => String!)
  titleAndSummary(@Root() project: Project) {
    return project.name + ' ++ ' + project.summary;
  }
}

Испытание

добавьте __typename к типу объекта напрямую, как показано ниже

 @Resolver((of) => Project)
export class ProjectResolver {
  @FieldResolver((returns) => String!)
  titleAndSummary(@Root() project: Project) {
    return project.name + ' ++ ' + project.summary;
  }

  @FieldResolver((returns) => String!)
  __typename() {
    return 'Project';
  }
}

Но при запросе выдает ошибку

◈ Error during invocation:  {
  errorMessage: 'Name "__typename" must not begin with "__", which is reserved by GraphQL introspection.',
  errorType: 'Error',
...

Как я могу это решить?

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


person White Piano    schedule 21.02.2021    source источник


Ответы (1)


Похоже, вы включили минимизацию пакета, поэтому все имена классов искажены.

person Michał Lytek    schedule 28.02.2021