nestjs-typegoose
    TypeScript icon, indicating that this package has built-in type declarations

    7.1.38 • Public • Published

    nestjs-typegoose

    NPM

    npm version Build Status Coverage Status npm npm bundle size David

    Description

    Injects typegoose models for nest components and controllers. Typegoose equivalant for @nestjs/mongoose.

    Using Typegoose removes the need for having a Model interface.

    Installation

    npm install --save nestjs-typegoose

    or

    yarn add nestjs-typegoose
    

    Documentation

    Here is the full documentation describing all basic and advanced features.

    Basic usage

    You can checkout the example project for more details.

    app.module.ts

    import { Module } from "@nestjs/common";
    import { TypegooseModule } from "nestjs-typegoose";
    import { CatsModule } from "./cat.module.ts";
     
    @Module({
      imports: [
        TypegooseModule.forRoot("mongodb://localhost:27017/nest", {
          useNewUrlParser: true,
        }),
        CatsModule,
      ],
    })
    export class ApplicationModule {}

    Create class that describes your schema

    cat.model.ts

    import { prop } from "@typegoose/typegoose";
    import { IsString } from "class-validator";
     
    export class Cat {
      @IsString()
      @prop({ required: true })
      name: string;
    }

    Inject Cat for CatsModule

    cat.module.ts

    import { Module } from "@nestjs/common";
    import { TypegooseModule } from "nestjs-typegoose";
    import { Cat } from "./cat.model";
    import { CatsController } from "./cats.controller";
    import { CatsService } from "./cats.service";
     
    @Module({
      imports: [TypegooseModule.forFeature([Cat])],
      controllers: [CatsController],
      providers: [CatsService],
    })
    export class CatsModule {}

    Get the cat model in a service

    cats.service.ts

    import { Injectable } from "@nestjs/common";
    import { InjectModel } from "nestjs-typegoose";
    import { Cat } from "./cat.model";
    import { ReturnModelType } from "@typegoose/typegoose";
     
    @Injectable()
    export class CatsService {
      constructor(
        @InjectModel(Cat) private readonly catModel: ReturnModelType<typeof Cat>
      ) {}
     
      async create(createCatDto: { name: string }): Promise<Cat> {
        const createdCat = new this.catModel(createCatDto);
        return await createdCat.save();
      }
     
      async findAll(): Promise<Cat[] | null> {
        return await this.catModel.find().exec();
      }
    }

    Finally, use the service in a controller!

    cats.controller.ts

    import { Controller, Get, Post, Body } from "@nestjs/common";
    import { CatsService } from "./cats.service";
    import { Cat } from "./cats.model.ts";
     
    @Controller("cats")
    export class CatsController {
      constructor(private readonly catsService: CatsService) {}
     
      @Get()
      async getCats(): Promise<Cat[] | null> {
        return await this.catsService.findAll();
      }
     
      @Post()
      async create(@Body() cat: Cat): Promise<Cat> {
        return await this.catsService.create(cat);
      }
    }

    Requirements

    1. @typegoose/typegoose +6.1.5
    2. @nestjs/common +6.10.1
    3. @nestjs/core +6.10.1
    4. mongoose (with typings @types/mongoose) +5.7.12

    License

    nestjs-typegoose is MIT licensed.

    Keywords

    none

    Install

    npm i nestjs-typegoose

    DownloadsWeekly Downloads

    5,809

    Version

    7.1.38

    License

    MIT

    Unpacked Size

    314 kB

    Total Files

    28

    Last publish

    Collaborators

    • kpfromer