当我使用构建架构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 开发服务器和实际部署的真实服务器)
代码
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',
...
我该如何解决?
因为我英语不好,所以我担心如果有错误的事情。请让我知道并纠正。谢谢。