nestjs-typegoose
Version:
A nestjs module wrapper for typegoose
132 lines (97 loc) • 3.81 kB
Markdown
---
id: usage
title: Basic Usage
---
:::note
Check out this [example project](https://github.com/kpfromer/nestjs-typegoose/tree/master/example) if you need help.
:::
You can check out the `example` project for more details.
We will be creating a `CatsModule`, a `Cat` database model, a `CatsService`, and a `CatsController`.
## Connecting to the MongoDB database
First, we will connect to the mongo database using `TypegooseModule.forRoot`. We will import the `CatsModule` that we will create shortly.
If you want to have more connections to different databases read about how to do that [here](multiple-connections.md).
**app.module.ts**
```typescript
import { Module } from "@nestjs/common";
import { TypegooseModule } from "nestjs-typegoose";
import { CatsModule } from "./cat.module.ts";
export class ApplicationModule {}
```
Here we are connecting to `mongodb://localhost:27017/nest`. To learn more about MongoDB URI's see the official [mongodb article](https://docs.mongodb.com/manual/reference/connection-string/).
## Creating a Database Model
We now need to create a database model that describes the data we want to store. In this case, it will be cats with names. Read more about typegoose [here](https://github.com/typegoose/typegoose).
**cat.model.ts**
```typescript
import { prop } from "@typegoose/typegoose";
export class Cat {
name: string;
}
```
## Creating the service
We need to create a service to handle the business logic of creating, reading, updating, and deleting (CRUD) entires, or cats, in the database.
**cats.service.ts**
```typescript
import { Injectable } from "@nestjs/common";
import { InjectModel } from "nestjs-typegoose";
import { Cat } from "./cat.model";
import { ReturnModelType } from "@typegoose/typegoose";
export class CatsService {
constructor(
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();
}
}
```
## Connecting with the API
Now we have the service created we need to connect this with the actual API calls. The `CatsController` will receive GET and POST requests on the URL `/cats` and will get and create cats respectively.
**cats.controller.ts**
```typescript
import { Controller, Get, Post, Body } from "@nestjs/common";
import { CatsService } from "./cats.service";
import { Cat } from "./cats.model.ts";
export class CatsController {
constructor(private readonly catsService: CatsService) {}
async getCats(): Promise<Cat[] | null> {
return await this.catsService.findAll();
}
async create( cat: Cat): Promise<Cat> {
return await this.catsService.create(cat);
}
}
```
## Providing the model for our services
We have to make sure we provide the needed models to our service with `TypegooseModule.forFeature` for the `InjectModel` to work. This helps prevents unauthorized access to other models.
**cat.module.ts**
```typescript
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";
export class CatsModule {}
```
That's it, you have created a simple working api with `nestjs-typegoose`!