NestJs
创建项目
初始化NestJs项目
- 安装
NestJs
的cli
npm i -g @nestjs/cli
- 新建
NestJs
项目
nest new <project-name>
整合graphql
- 安装
graphql
npm i @nestjs/graphql @nestjs/apollo graphql apollo-server-express
- 在
src/app.module.ts
文件中配置graphql
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import * as path from 'path';
@Module({
imports: [
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
autoSchemaFile: path.join(process.cwd(), 'src/schema.gql'),
sortSchema: true,
}),
],
})
export class AppModule {}
postgres
数据库的准备
- 创建
docker
的postgres
具名数据卷
docker volume create postgres_data
- 启动
postgres
的docker
容器
docker run --name postgres -e POSTGRES_PASSWORD=root -p 5432:5432 -v postgres_data:/var/lib/postgresql/data --restart=always -d -- postgres:latest
- 进入
postgres
的docker
容器
docker exec -it postgres /bin/bash
- 在容器中进入
postgres
的cli
psql -U postgres
- 在
postgres
的cli
中创建mydb
数据库
create database mydb;
整合prisma
- 安装
prisma
npm i prisma --save-dev
npm i @prisma/client
- 初始化
schema.prisma
npx prisma init
- 配置
.env
文件中DATABASE_URL
为自己的数据源地址
DATABASE_URL="postgresql://postgres:root@localhost:5432/mydb?schema=public"
- 在
src/prisma.service.ts
中配置@prisma/client
import { INestApplication, Injectable, OnModuleInit } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit {
async onModuleInit() {
await this.$connect();
}
async enableShutdownHooks(app: INestApplication) {
this.$on('beforeExit', async () => {
await app.close();
});
}
}
在tsconfig.json
中添加esModuleInterop
配置
{
"esModuleInterop": true
}