Когда я создаю схему, используя 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',
...
Как я могу это решить?
Поскольку я не силен в английском, я беспокоюсь о том, что что-то не так. пожалуйста, дайте мне знать и исправить. Спасибо.