NestJS 和 GraphQL - TypeError:graphql_1.parse 不是具有最少设置的函数
Posted
技术标签:
【中文标题】NestJS 和 GraphQL - TypeError:graphql_1.parse 不是具有最少设置的函数【英文标题】:NestJS and GraphQL - TypeError: graphql_1.parse is not a function with minimal setup 【发布时间】:2019-03-04 20:24:06 【问题描述】:我开始使用 Nest 构建我的第一个 API。 我正在尝试添加 GraphQL,但一开始就遇到了问题。
TypeError: graphql_1.parse is not a function
at Object.<anonymous> (C:\Users\marek\dev\eparafie\api-nest\node_modules\apollo-server-core\node_modules\graphql-tools\src\stitching\introspectSchema.ts:7:48)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object.<anonymous> (C:\Users\marek\dev\eparafie\api-nest\node_modules\apollo-server-core\node_modules\graphql-tools\src\stitching\index.ts:2:1)
at Module._compile (internal/modules/cjs/loader.js:689:30)
到目前为止,我只有 UsersModule,在它的文件夹中我有 users.graphql 文件:
type Mutation
createUser(createUserInput: CreateUserInput): User
type User
id: Int
email: String
password: String
input CreateUserInput
email: String
password: String
我也有简单的解析器:
import UserService from './user.service';
import Mutation, Resolver from '@nestjs/graphql';
import Body from '@nestjs/common';
import CreateUserDto from '../dto/CreateUserDto';
@Resolver('User')
export class UserResolver
constructor(
private readonly userService: UserService,
)
@Mutation()
async createUser(@Body() createUserDto: CreateUserDto)
return await this.userService.create(createUserDto);
我的 app.module.ts:
import Module from '@nestjs/common';
import TypeOrmModule from '@nestjs/typeorm';
import GraphQLModule from '@nestjs/graphql';
import Connection from 'typeorm';
import AppController from './app.controller';
import AppService from './app.service';
import UserService from './user/user.service';
import RolesService from './auth/roles.service';
import MembershipsService from './auth/memberships.service';
import UserModule from './user/user.module';
import join from 'path';
@Module(
imports: [
TypeOrmModule.forRoot(),
GraphQLModule.forRoot(
typePaths: ['./**/*.graphql'],
definitions:
path: join(process.cwd(), 'src/graphql.ts'),
,
),
UserModule,
],
controllers: [AppController],
providers: [AppService,
UserService,
RolesService,
MembershipsService,
],
)
export class AppModule
constructor(private readonly connection: Connection)
如果重要,用户模块:
import Module from '@nestjs/common';
import User from './user.entity';
import TypeOrmModule from '@nestjs/typeorm';
import UserService from './user.service';
import UserResolver from './user.resolver';
@Module(
imports: [TypeOrmModule.forFeature([User])],
providers: [UserService, UserResolver],
controllers: [],
)
export class UserModule
依赖版本:
"dependencies":
"@nestjs/common": "^5.3.9",
"@nestjs/core": "^5.3.10",
"@nestjs/graphql": "^5.4.0",
"@nestjs/typeorm": "^5.2.2",
"apollo-server-express": "^2.1.0",
"graphql": "^14.0.2",
"graphql-tools": "^4.0.0",
"pg": "^7.4.3",
"reflect-metadata": "^0.1.12",
"rxjs": "^6.2.2",
"typeorm": "^0.2.7",
"typescript": "^3.1.1"
,
"devDependencies":
"@nestjs/testing": "^5.1.0",
"@types/express": "^4.16.0",
"@types/jest": "^23.3.1",
"@types/node": "^10.7.1",
"@types/supertest": "^2.0.5",
"jest": "^23.5.0",
"nodemon": "^1.18.3",
"prettier": "^1.14.2",
"rimraf": "^2.6.2",
"supertest": "^3.1.0",
"ts-jest": "^23.1.3",
"ts-loader": "^4.4.2",
"ts-node": "^7.0.1",
"tsconfig-paths": "^3.5.0",
"tslint": "5.11.0",
"webpack": "^4.16.5",
"webpack-cli": "^3.1.0",
"webpack-node-externals": "^1.7.2"
,
src/graphql.ts 应该是从我的 graphql 文件生成的吧?或者我错过了什么? 文档对此并不是 100% 清楚,但看起来需要解析器和带有类型的 graphql,应该没问题。 我将非常感谢任何帮助。
【问题讨论】:
请将错误的堆栈跟踪添加到问题中。 完成。抱歉,我很确定我做到了 看起来graphql
模块加载出了点问题。我试图简单地重现该问题,但没有成功。你能分享一个为你重现问题的存储库吗?
@MattMcCutchen 我也有同样的问题。
@AbhinandanN.M.好的;如果您可以提供存储库,我将能够进行调查。
【参考方案1】:
将类型的文件名更改为 graphql.ts
以外的名称。
这样
definitions:
path: join(process.cwd(), 'src/gql.ts'),
,
【讨论】:
【参考方案2】:我认为将输出更改为类解决了我的问题:
definitions:
path: join(process.cwd(), 'src/graphql.schema.ts'),
outputAs: 'class',
,
(并在使用新代码启动服务器之前删除旧的自动生成文件)
另外要提到的是将此文件添加到 nodemon 异常(在根文件夹中的 nodemon.json
)以避免在开发模式下重新加载循环(当您使用 npm run start:dev
时)
...
"ignore": ["src/**/*.spec.ts", "src/graphql.schema.ts"],
...
【讨论】:
没有。将名称从 graphql.ts 更改为 graphql.schema.ts 解决了您的问题。以上是关于NestJS 和 GraphQL - TypeError:graphql_1.parse 不是具有最少设置的函数的主要内容,如果未能解决你的问题,请参考以下文章
使用 REST 包装 GraphQL 从 NestJS 提供 GraphQL 和 REST API
NestJS 和 GraphQL - TypeError:graphql_1.parse 不是具有最少设置的函数
错误:使用 Nestjs + Graphql + Typeorm 时无法确定 GraphQL 输入类型
Neo4j 数据库、NestJS 框架和 GraphQL 如何集成?