基于NestJS配置GraphQL、MySQL

1,821 阅读2分钟

技术栈

NestJS +MySQL + TypeORM + apollo-GraphQL

项目搭建

  • 安装@nest/cli脚手架用于生成项目
npm i -g @nest/cli
  • 生成项目
nest new nest-test
cd ./nest-test

  • 启动项目
yarn start:dev

启动完成后默认地址为:http://localhost:3000/,访问即可以看到熟悉的Hello World!;

连接MySQl数据库

这里使用了TypeORM作为数据库实体映射工具,可以简化数据库连接与CRUD操作;

安装依赖

yarn add @nestjs/typeorm typeorm mysql

src/app.module.ts里配置数据库连接

import { join } from 'path';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      "type": "mysql",
      "host": "localhost",
      "port": 3306,
      "username": "root",
      "password": "sql",
      "database": "typeorm",
      "entities": [join(__dirname, '**/entity/*.{ts,js}')],
      "synchronize": true  //自动同步数据库生成entity
    }),
    GraphQLModule.forRoot({
      autoSchemaFile: './schema.gql', //代码先行(既先写实体定义)
    }),
  ],
})

说明:

  • 需要提前在mysql里创建空数据库typeorm
  • 在上面的TypeOrmModule配置里我们设置了数据库实体映射的文件路径为**/entity/*.{ts,js}
  • 为了开发方便,设置了synchronize: true,使typeorm可以自动在mysql里生成实体类定义的Collections,这样就省去了手动建立Collections的操作了;

GraphQL配置

安装依赖

yarn add @nestjs/graphql graphql-tools graphql apollo-server-express

src/app.module.ts里配置GraphQL

在NestJS框架下有两种开发GraphQL的策略,一种是先写实体类定义的代码先行Code First)方式,另一种是先写schema.gql架构先行Schema First)方式;具体看个人喜好以及开发风格。

import { GraphQLModule } from '@nestjs/graphql';

@Module({
  imports: [
    GraphQLModule.forRoot({
      autoSchemaFile: './schema.gql', //代码先行(既先写实体定义)
    }),
  ],
})

开发业务模块

具体文件目录如下:

image2021-10-18_11-43-50.png

编写对应的业务代码,启动服务:yarn start:dev

启动完成即可访问 http://localhost:3000/graphql,打开GraphQL Playground就可以啦

WX20211019-193725@2x.png