写在开头
- 首先安装@nestjs/cli
npm i -g @nestjs/cli
然后用nest命令新建项目(类似与vuecli) nest new project-name
创建一个用户类
- 使用CLI快速创建用户模块:
nest g mo user
创建好后如下
同时app模块中会自动导入用户模块
- 创建用户类型的控制器:
nest g co user
创建好后如下
同时user.module中会自动更改
此时我们就可以在控制器中使用@Get() @Post @Put @Delete 装饰器 来构建路由
import { Controller, Get, Param, Post, Put, Delete } from '@nestjs/common';
@Controller('user')
export class UserController {
@Get()
findAll() {}
@Get(":id")
findOneById(@Param() id: string) {}
@Post()
create() {}
@Put()
update() {}
@Delete()
remove() {}
}
使用typegoose 构造模型
nestjs-typegoose文档参考链接
- 安装依赖包
npm i -s @typegoose/typegoose mongoose nestjs-typegoose
npm i -D @types/mongoose
- 创建一个user.model.ts文件,内容如下
import { prop } from '@typegoose/typegoose';
export class User {
@prop()
username: string
@prop()
password: string
}
- 在user.module下导入user模型
import { User } from './user.model';
import { Module } from '@nestjs/common';
import { UserController } from './user.controller';
import { UserService } from './user.service';
import { TypegooseModule } from 'nestjs-typegoose';
@Module({
imports: [TypegooseModule.forFeature([User])],
controllers: [UserController],
providers: [UserService]
})
export class UserModule {}
在service层进行数据库操作
- 在app.module中写入数据库链接
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './user/user.module';
import { TypegooseModule } from 'nestjs-typegoose';
@Module({
imports: [
TypegooseModule.forRoot("mongodb://localhost:27017/nest-lab-api" , {
useNewUrlParser: true
}),
UserModule
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
- 新建一个user.service.ts文件,并采用依赖注入的方式注入user模型
import { ModelType } from '@typegoose/typegoose/lib/types';
import { InjectModel } from 'nestjs-typegoose';
import { Injectable } from '@nestjs/common';
import { User } from "./user.model"
@Injectable()
export class UserService {
constructor(
@InjectModel(User) private readonly userModel: ModelType<User>
){}
async findAll() {
return await this.userModel.find();
}
async findOneById(id: string) {
return await this.userModel.findById(id);
}
async create(model: User) {
await this.userModel.create(model);
return {
success: true
}
}
async update(id: string, model: User) {
await this.userModel.findByIdAndUpdate(id, model);
return {
success: true
}
}
async remove(id: string) {
await this.userModel.findByIdAndRemove(id);
return {
success: true
}
}
}
在控制器(user.controller)中使用UserService
import { User } from './user.model';
import { UserService } from './user.service';
import { Controller, Get, Param, Post, Put, Delete, Body } from '@nestjs/common';
import { ApiTags, ApiOperation } from '@nestjs/swagger';
@Controller('user')
@ApiTags("User")
export class UserController {
constructor(
private readonly userService: UserService
) {}
@Get()
@ApiOperation({
summary: "获取全部用户数据"
})
async findAll() {
return await this.userService.findAll();
}
@Get(":id")
@ApiOperation({
summary: "根据用户Id获取指定用户信息"
})
async findOneById(@Param("id") id: string) {
return await this.userService.findOneById(id);
}
@Post()
@ApiOperation({
summary: "创建用户"
})
async create(@Body() user: User) {
return await this.userService.create(user)
}
@Put(":id")
@ApiOperation({
summary: "根据用户Id更新用户信息"
})
async update(@Param("id") id: string, @Body() user: User) {
return await this.userService.update(id, user);
}
@Delete(":id")
@ApiOperation({
summary: "根据用户Id删除用户"
})
async remove(@Param("id") id: string) {
return await this.userService.remove(id);
}
}
使用swagger自动生成接口文档
- 首先安装依赖包
npm install --save @nestjs/swagger swagger-ui-express
文档参考链接
- 在 main.ts 中使用 SwaggerModule 类初始化 Swagger
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const options = new DocumentBuilder()
//接口文档标题
.setTitle('Nest api example')
//接口文档描述
.setDescription('The user API description')
.setVersion('1.0')
.build();
const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup('api-docs', app, document);
await app.listen(3000);
}
bootstrap();

效果图
- 同时在user.controller中通过装饰器完善接口文档
import { Controller, Get, Param, Post, Put, Delete } from '@nestjs/common';
import { ApiTags, ApiOperation } from '@nestjs/swagger';
@Controller('user')
@ApiTags("User")
export class UserController {
@Get()
@ApiOperation({
summary: "获取全部用户数据"
})
findAll() {}
@Get(":id")
@ApiOperation({
summary: "根据用户Id获取指定用户信息"
})
findOneById(@Param("id") id: string) {
return id;
}
@Post()
@ApiOperation({
summary: "创建用户"
})
create() {}
@Put(":id")
@ApiOperation({
summary: "根据用户Id更新用户信息"
})
update(@Param("id") id: string) {}
@Delete(":id")
@ApiOperation({
summary: "根据用户Id删除用户"
})
remove(@Param("id") id: string) {}
}

效果图
网友评论