Nestjs Mongoose使用 (附加@nestjs/swagger使用)

Nestjs Mongoose使用 (附加@nestjs/swagger使用)

一开始并没有使用官方给出的mongoose包,而是使用了typegoose。

####首先要创建一个项目 然后见一个文件夹这里我的是posts然后创建好mvc

//PostsModule.ts 这个是最后结合mongoose的一个 解藕性很好的一个版本
//(什么是解耦:模块一的实现依赖于模块二,更改模块二后,模块一也得更改,那么二者就有耦合。
//修改程序,使得更改模块二后,模块一不受影响,那么就叫解藕)
import { Module } from '@nestjs/common';
import { TypegooseModule } from 'nestjs-typegoose';
import { Post } from './post.module';
import { PostsController } from './posts.controller';
import { PostsService } from './posts.service';

@Module({

    imports:[
        TypegooseModule.forFeature([Post])//通过forFeature去导入使用的模型,数组的原因是可能用到多个模型
    ],
    controllers:[PostsController],
    providers:[PostsService]
})
export class PostsModule {}

//post.ts , 一个定义好的模型
import {prop } from '@hasezoey/typegoose';

export class Post{
    @prop()
    title: string;
    @prop()
    content: string;
}

import { Injectable, Body, Response, Param } from '@nestjs/common';
import { ApiModelProperty } from '@nestjs/swagger';
import { IsNotEmpty } from 'class-validator';
import { Post} from './post.module';
import { InjectModel } from 'nestjs-typegoose';
export class CreatPostsDto {
	//这是引用了@nestjs/swagger去定义一些东西
  @ApiModelProperty({ description: 'xxx', example: 'xxxx' })
  @IsNotEmpty({ message: 'xxx' })
  title: string;
  @ApiModelProperty({ description: 'xxx', example: 'xxxx' })
  content: string;
}
@Injectable()
export class PostsService {
	//使用nestjs-typegoose的InjectModel不要使用mongoose的 去导入Post。
  constructor(@InjectModel(Post) private readonly postModule) {}
  //这是一个查询方法是这个包@hasezoey/typegoose里的查询方法
  async fidAll(@Response() res) {
    return await this.postModule.find().then(rtn => {
      res.json({ rtn: rtn });
    });
  }

  }
}

//PostsController.ts 这个应该都看的懂!
import { Controller, Get, Post, Response, Body, Put, Delete, Param } from '@nestjs/common';
import { ApiUseTags, ApiOperation, } from '@nestjs/swagger';
import { PostsService } from './posts.service';
import {CreatPostsDto} from './posts.service';
@Controller('posts')
//还是使用的@nestjs/swagger
@ApiUseTags('帖子')
export class PostsController {
    constructor(private readonly PostsService:PostsService){}
    @Get()
    @ApiOperation({title:'显示'})
     async index(@Response() res){
        return await this.PostsService.fidAll(res);
    }

}

然后还需要链接数据库
//这是app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypegooseModule } from 'nestjs-typegoose';
import { PostsModule } from './posts/posts.module';
@Module({
  imports: [
  //使用nestjs-typegoose里的TypegooseModule.forRoot去链接数据库
    TypegooseModule.forRoot("mongodb://localhost:27017/blog", {
      useNewUrlParser: true
    }),
    PostsModule
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

最后附上main.ts配置
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { ValidationPipe } from '@nestjs/common';
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe())
  const options = new DocumentBuilder()
    .setTitle('Cats example')
    .setDescription('The cats API description')
    .setVersion('1.0')
    .addTag('cats')
    .build();
  const document = SwaggerModule.createDocument(app, options);
  SwaggerModule.setup('api-docs', app, document);
  await app.listen(3000);
}
bootstrap();

因为官方文档的mongoose很复杂最后使用的typegoose,然后现在新版本的发布使得解耦性很好写法和mongoose近似非常好使!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值