Typegoose with NestJS
Find a file
2021-08-14 15:43:52 -06:00
.github fix: npm release github action 2021-08-14 15:34:33 -06:00
example Merge branch 'master' into fix/update-typegoose-version 2020-09-20 23:08:01 -06:00
src fix: test typing 2020-09-28 19:06:02 -06:00
test Fix linting issues 2020-01-12 14:22:33 -07:00
website fix: update docs website configuration 2020-09-09 11:34:20 -06:00
.editorconfig use @hasezoey/typegoose package instead old typegoose 2019-09-26 18:48:10 -04:00
.gitignore fix: update docs website configuration 2020-09-09 11:34:20 -06:00
.npmignore chore: add website to ignore for npm 2020-09-20 23:04:48 -06:00
CHANGELOG.md chore(release): 7.1.38 [skip ci] 2020-09-29 01:16:01 +00:00
commitlint.config.js chore(npm): add commitizen, commitlint, husky for better commit messages 2020-03-17 14:34:51 -06:00
CONTRIBUTING.md Add readme and contributing guidelines 2018-04-16 09:23:48 -04:00
gulpfile.js feature: support discriminators in model options 2019-11-12 14:49:13 -05:00
LICENSE Add License 2018-04-15 22:10:56 -04:00
package-lock.json chore(release): 7.1.38 [skip ci] 2020-09-29 01:16:01 +00:00
package.json chore(release): 7.1.38 [skip ci] 2020-09-29 01:16:01 +00:00
README.md docs(readme): add more badges 2020-05-05 10:04:10 -06:00
tsconfig.build.json Fix example included in build 2020-01-07 19:26:46 -07:00
tsconfig.json Fix example included in build 2020-01-07 19:26:46 -07:00
tslint.json Enforce more consitent code style 2019-11-09 11:28:12 +01:00
yarn.lock chore: add @typegoose/typegoose 7 as valid peer 2020-09-20 23:04:21 -06:00

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.