技术栈
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操作;
- TypeORM官方介绍与文档:TypeORM文档 (右上角可切换中文)
- NestJS框架下使用TypeORM指南:@nestjs/typeorm文档
安装依赖
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', //代码先行(既先写实体定义)
}),
],
})
开发业务模块
具体文件目录如下:
编写对应的业务代码,启动服务:yarn start:dev
启动完成即可访问 http://localhost:3000/graphql,打开GraphQL Playground就可以啦