目录
1. 基于node创建一个Nest.js项目
1.1 初始化nest项目
npm i -g @nestjs/cli
nest new project-name(你自己的项目名称)
npm run start:dev
1.2 为nest创建模块与控制器
使用nest -h 可以看nest的命令
nest g module 模块名称
//简写
nest g co demo
执行后,会自动创建demo.module.ts,并在 app.module.ts 中自动引入 DemoModule
nest g controller 控制器名称
//简写
nest g co demo
执行完成后,会自动创建demo.controller.ts,并在demo.module.ts中自动引入DemoController
在demo.controllers.ts中写好接口,根据main.ts中的端口号在postman调用测试
2. 建立数据库并连接
npm install --save @nestjs/mongoose mongoose
import { MongooseModule } from '@nestjs/mongoose';
imports: [MongooseModule.forRoot('mongodb://localhost/nest-demo'),],
例如:我是在demo文件夹下创建了一个demo.type.ts文件
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
// 表文件
export type demoDocument = demoList & Document;
@Schema()
// 定义一个名为demoList的类,该类继承自Document类,表示该类的实例可以被存储到数据库中。
export class demoList extends Document {
// @Prop()装饰器可以接受一些参数
@Prop()
user_name: string; //账号
@Prop()
age: string; //年龄
@Prop()
sex: string; //性别
}
// 创建了一个名为demoSchema的模式,该模式基于demoList类。
export const demoSchema = SchemaFactory.createForClass(demoList);
import {demoList,demoSchema} from './demo.type'
@Module({
imports:[MongooseModule.forFeature([{name:demoList.name,schema:demoSchema}])]
})
此时就可以连接到mongodb数据库了
我的链接地址是:mongodb://localhost:27017
是由 MongoDB 的协议(mongodb://)、主机名(localhost)和端口号(27017)组成。这个连接地址用于在应用程序中连接到 MongoDB 数据库。
3. 新建增删改查
- 依赖注入数据库表
在demo文件夹下的demo.controller.ts中
import { InjectModel } from '@nestjs/mongoose';
@Controller('demo')
export class DemoController {
// 使用NestJS中的@InjectModel装饰器来将名为 "demo" 的模型注入到 DemoModule 中。
// DemoModule是从demo.module中获取的
constructor(@InjectModel('demo') private readonly DemoModule) {}
}
2.1、新增
代码:
@Post('add')
async pageAdd(@Body() body) {
// create 插入一条数据,直接将接收到的body参数插入
const data = await this.DemoModule.create(body);
return { code: 200, data: data, message: '新增数据成功' };
}
在postman中查看新增
2.2、编辑
@Post('edit')
async pageEdit(@Body() updateData: any) {
// { new: true,} 这个一定要写上 不然返回的不是最新数据
const data = await this.DemoModule.findByIdAndUpdate(updateData.id, updateData, {
new: true,
});
return { code: 200, data: data, message: '编辑成功' };
}
2.3、查询
代码:
// 最新添加 搜索-总数据条数等功能
@Get("list")
//根据页码和每页行数进行搜索 @Query("page") page:number, @Query("pageSize") pageSize:number,不要就不加
async pageList(
@Query() query:any,
@Query("page") page:number,
@Query("pageSize") pageSize:number){
const skip=(page - 1) * pageSize
const limit = pageSize;
//const data =await this.DemoModule.find(query)
//模糊查询
const data =await this.DemoModule.find({ user_name:{ $regex: query.user_name || '', $options: 'i' }
}).skip(skip).limit(limit)
//添加数据条数---countDocuments方法来获取满足查询条件的总条数
const total =await this.DemoModule.countDocuments()
//_id变为id 并删除
const modeData=data.map(item=>{
const obj=item.toObject();
obj.id=obj._id;
delete obj._id
delete obj.__v
return obj
})
return { code: 200, data: modeData,total, message: '操作成功' };
}
注:模糊查询,除了页码等data返回的数据都可以当做查询条件
2.4、删除
代码:
//post的使用方式
@Post('remove')
async pageRemove(@Query("id") id:string){
const data =await this.DemoModule.findByIdAndDelete(id);
return {code: 200, data: data, message: '删除成功'}
}
//delete的使用方式
@Delete('delete')
async pageDelete(@Query('id') id: string) {
const data = await this.DemoModule.findByIdAndDelete(id);
return { code: 200, data: data, message: '删除成功' };
}
4. 生成swagger文档
下载依赖npm install --save @nestjs/swagger swagger-ui-express
在main.ts中引入
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
const options = new DocumentBuilder()
.setTitle('swagger文档的名称')
.setVersion('1.0') // 当前swagger文档的版本号
.setDescription('demo的swagger文档的描述')
// .addTag('demo文档的标签') // swagger文档的标签(可加可不加)
.build();
const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup('api', app, document);
//浏览器查看接口文档访问路径 127.0.0.1:32000/api(本地地址加上自己设置的端口号)