跳到主要内容

Nestjs bookmark 案例实践

前提条件

  • 框架完全使用 typescript
  • 熟练装饰器
  • 理解依赖注入
  • 面向切片模式

什么是 nestjs

基于 express 开发的后端框架,主要解决模块、规范,集中软件工程开发相关。

安装

 pnpm i -g @nestjs/cli

新建项目

nest new bookmark_rest-nestjs

重点记住下面三大模块

  • controller: 接受互联网请求
  • module: 数据模型
  • service: 提供服务、函数处理逻辑等

Module

Nestjs: Module

Module

src
├── app.module.ts
└── main.ts

Module 之间相互引用

一、单个 module 导出

// prisma.module.ts
@Module({
  providers: [PrismaService],
  exports: [PrismaService]
})
export class PrismaModule {}

需要时导入

// auth.module.ts
import { Module } from '@nestjs/common';
import { AuthController } from './auth.controller';
import { AuthService } from './auth.service';
import { PrismaModule } from 'src/prisma/prisma.module';

@Module({
  imports: [PrismaModule],
  controllers: [AuthController],
  providers: [AuthService],
})
export class AuthModule {}

二、使用 @Global() 修饰器

@Global()
@Module({
  providers: [PrismaService],
  exports: [PrismaService]
})
export class PrismaModule {}

上手时不使用生成器

手戳代码

// auth/auth.module.ts
import { Module } from '@nestjs/common';

@Module({})
export class BookmarkModule {}
// app.module.ts
import { Module } from '@nestjs/common';
import { AuthModule } from './auth/auth.module';

@Module({
  imports: [AuthModule],
})

export class AppModule {}

使用生成器创建 module

nest g module bookmark
nest g module user

Controller

auth.controller.ts

// auth.controller.ts
import { Controller } from '@nestjs/common';
import { AuthService } from './auth.servicer';

@Controller()
export class AuthController{
authService: AuthService;

construsor(authService: AuthService){
this.authService = authService
}
}
// auth.controller.ts
import { Controller } from '@nestjs/common';
import { AuthService } from './auth.servicer';

@Controller()
export class AuthController{
construsor(private authService: AuthService) {}
}

Service

处理逻辑,连接数据库、编辑字段等等,提供给 controller 调用。

Service

import { Injectable } from '@nestjs/common';

@Injectable({})
export class AuthService {
  signup() {
    return { msg: 'This is singup!' };
  }

  signin() {
    return { msg: 'This is singin!' };
  }
}

controller

import { Controller, Post } from '@nestjs/common';
import { AuthService } from './auth.service';

@Controller('auth')
export class AuthController {
  constructor(private authService: AuthService) {}

  @Post('signup')
  signup() {
    return this.authService.signup();
  }

  @Post('signin')
  signin() {
    return this.authService.signin();
  }
}