基于node创建一个nest.js项目,并与mongodb数据连接,生成swagger文档

1. 基于node创建一个Nest.js项目

1.1 初始化nest项目
  • 全局安装脚手架
npm i -g @nestjs/cli
  • 创建一个基础的Nest.js项目
nest new project-name(你自己的项目名称)
  • nest启动命令
npm run start:dev
1.2 为nest创建模块与控制器

使用nest -h 可以看nest的命令
nest -h 运行效果

  • 创建模块名称
 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. 建立数据库并连接

  • 下载mongoose的依赖
npm install --save @nestjs/mongoose mongoose 
  • 找到app.module.ts文件

在这里插入图片描述

import { MongooseModule } from '@nestjs/mongoose';
  imports: [MongooseModule.forRoot('mongodb://localhost/nest-demo'),],
  • 在自己创建的文件夹下创建ts文件并建表(自定义名称)

例如:我是在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);
  • 引入表到demo.module.ts文件中(当然也可以在app.module.ts文件中写,改变一下路径就可以)
import {demoList,demoSchema} from './demo.type'
@Module({
    imports:[MongooseModule.forFeature([{name:demoList.name,schema:demoSchema}])]
})

在这里插入图片描述
此时就可以连接到mongodb数据库了
我的链接地址是:mongodb://localhost:27017
是由 MongoDB 的协议(mongodb://)、主机名(localhost)和端口号(27017)组成。这个连接地址用于在应用程序中连接到 MongoDB 数据库。
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(本地地址加上自己设置的端口号)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值