Nestjs bookmark 案例实践
前提条件
- 框架完全使用 typescript
- 熟练装饰器
- 理解依赖注入
- 面向切片模式
什么是 nestjs
基于 express 开发的后端框架,主要解决模块、规范,集中软件工程开发相关。
安装
pnpm i -g @nestjs/cli
新建项目
nest new bookmark_rest-nestjs
重点记住下面三大模块
- controller: 接受互联网请求
- module: 数据模型
- service: 提供服务、函数处理逻辑等
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();
}
}