使用NestJS和GraphQL创建开发环境
使用NestJS和GraphQL创建开发环境。
目录
-
- 创建 NestJS 应用程序
-
- 建立 GraphQL 的依赖关系
-
- 准备 mysql(docker)
- 建立 mysql 的依赖关系
创建一个NestJS应用程序。
使用NestCli来构建NestJS应用程序。
如果尚未安装 cli,请从上面的 URL 地址安装 cli,并创建应用程序。
$ nest new nestjs-graphql
$ npm run start:dev
请确保在 localhost:3000 中显示以下屏幕。

2. 建立 GraphQL 的依赖关系
我在Qiita的文章中提到,我们将解决依赖关系。
我們將安裝使用GraphQL所需的四個元件。
$ npm i --save @nestjs/graphql graphql-tools graphql apollo-server-express
为了避免在库的类型定义中出现错误,请编辑tsconfig.json文件。
{
"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"]
}
我们将根据公式文档来定义GraphQL的依赖关系到app.module。
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 {}
启动服务器并访问play ground,确认play ground是否显示。
$ npm run start:dev
在下面以图形方式显示Play Ground。

准备一个MySQL(Docker).
我們將添加docker-compose.yml和Dockerfile。
$ touch docker-compose.yml
$ touch Dockerfile
目前的目錄結構預計如下。
$ tree -L 1 -I node_modules
.
├── Dockerfile
├── README.md
├── dist
├── docker-compose.yml
├── nest-cli.json
├── package-lock.json
├── package.json
├── src
├── test
├── tsconfig.build.json
└── tsconfig.json
我們將創建一個僅包含MySQL的Docker容器,並逐步進行所需的啟動設定。
FROM mysql:5.7
version: '3.7'
services:
db:
build: .
command: --default-authentication-plugin=mysql_native_password
restart: always
tty: true
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: develop
最后,你要启动Docker并确认它是否正常工作。
$ docker-compose up
$ docker ps -a
搭建MySQL的依赖关系
我们将根据公式文件的指导来构建依赖关系。
$ npm install --save @nestjs/typeorm typeorm mysql
当安装完上述内容后,我们将在app.module中进行所需设置的记录。虽然这样做有些不礼貌,但我们仍会先记录一些能让它先运行的设置。
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { TypeOrmModule } from '@nestjs/typeorm';
import { join } from 'path';
@Module({
imports: [
GraphQLModule.forRoot({
typePaths: ['./**/*.graphql'],
definitions: {
path: join(process.cwd(), 'src/models/graphql.ts'),
outputAs: 'class',
},
}),
TypeOrmModule.forRootAsync({
useFactory: () => ({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'example',
database: 'develop',
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: true,
}),
}),
],
})
export class AppModule {}
上述的简单设置已完成,现在只需随时添加GraphQL即可进行实现。
写一篇报告