other
Nestjs

NestJs

NestJs官网 (opens in a new tab)

创建项目

初始化NestJs项目

  • 安装NestJscli
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数据库的准备

  • 创建dockerpostgres具名数据卷
docker volume create postgres_data
  • 启动postgresdocker容器
docker run --name postgres -e POSTGRES_PASSWORD=root -p 5432:5432 -v postgres_data:/var/lib/postgresql/data --restart=always -d -- postgres:latest
  • 进入postgresdocker容器
docker exec -it postgres /bin/bash
  • 在容器中进入postgrescli
psql -U postgres
  • postgrescli中创建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
}