如果你在尝试使用NestJS和GraphQL时遇到了困难
当我想要在NestJS上尝试使用GraphQL时遇到了困难。
我想要学习GraphQL,所以我打算先做一个待办事项应用程序,但遇到了一些困难,所以我想记录下来作为备忘录。
太长了,没时间阅读,可以简短概括一下吗?
- 在 `tsconfig.json` 中加入 `skipLibCheck: true`,然后安装 `@nestjs/graphql`、`graphql-tools` 和 `graphql` 依赖包,再安装 `apollo-server-express`。最后编写至少一个 GraphQL 的 schema。
我会动。 (Wǒ huì .)
我会把流向和文件写在下面。
目录
-
- 创建一个NestJS应用程序
- 安装GraphQL依赖关系
创建一个NestJS应用程序。
使用NestJS的命令行界面,根据URL进行安装预先准备,非常方便。
$ nest new nest-graphql
$ cd nest-graphql
$ npm run start
在本地主机的端口3000上以以下方式显示:
2. 安装并设置GraphQL的依赖关系。
根据公式文档中的描述,我们将添加依赖关系并对app.module.ts进行更改。
$ npm i --save @nestjs/graphql graphql-tools graphql
我会添加 GraphQL 模块。
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
import { Module } from '@nestjs/common';
//ここから追記
import { GraphQLModule } from '@nestjs/graphql';
//ここまで追記
@Module({
imports: [
//ここから追記
GraphQLModule.forRoot({
debug: true,
playground: true,
}),
//ここまで追記
],
})
export class AppModule {}
在记录完成之后,将启动服务器(会出现第一个错误)。
$ npm run start
node_modules/apollo-server-core/dist/ApolloServer.d.ts:5:8 - error TS1259: Module '"/nestjs-graphql/node_modules/@types/ws/index"' can only be default-imported using the 'esModuleInterop' flag
5 import WebSocket from 'ws';
~~~~~~~~~
node_modules/@types/ws/index.d.ts:270:1
270 export = WebSocket;
~~~~~~~~~~~~~~~~~~~
This module is declared with using 'export =', and can only be used with a default import when using the 'esModuleInterop' flag.
Found 1 error(s).
一旦确认错误后发现TypeScript的定义有问题。将修复tsconfig.json以解决该问题,正如在GitHub的问题中所提到的。
{
"compilerOptions": {
"module": "commonjs",
"declaration": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es2017",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true
},
"exclude": ["node_modules", "dist"]
}
{
"compilerOptions": {
"module": "commonjs",
"declaration": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es2017",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true,
//ここから追記
"skipLibCheck": true
//ここまで追記
},
"exclude": ["node_modules", "dist"]
}
由于已修正所示错误,将启动服务器(同时也会消除错误)。
$ npm run start
[Nest] 22047 - 2020-05-26 12:15:28 AM [PackageLoader] The "apollo-server-express" package is missing. Please, make sure to install this library ($ npm install apollo-server-express) to take advantage of GraphQLModule. +10ms
因为显示要安装apollo-server-express,所以我按照显示的安装了apollo-server-express。(你好,又出现了错误)
$ npm install apollo-server-express
$ npm run start
UnhandledPromiseRejectionWarning: Error: Apollo Server requires either an existing schema, modules or typeDefs
因为需要schema、modules或typeDefs,所以我们将在app.module.ts中进行追加,并且先添加todo.graphql。
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { join } from 'path';
@Module({
imports: [
GraphQLModule.forRoot({
debug: false,
playground: true,
typePaths: ['./**/*.graphql'],
definitions: {
path: join(process.cwd(), 'src/graphql.ts'),
outputAs: 'class',
},
}),
],
})
export class AppModule {}
接下来,您可以添加 todo.graphql 文件。(您可以根据个人喜好进行修改)
$ touch src/todo.graphql
type Query {
getTodos: [Todo]
todo(id: ID!): Todo
}
type Todo {
title: String
id: String
description: String
}
我们将确保最后正常运作。
$ npm run start
如果运行成功并在playground上显示如下内容,则表示已完成适配工作。
代码库