Використання NestJS з MongoDB: Повний посібник

NestJS здобув популярність завдяки своїй надійній архітектурі, що використовує TypeScript та масштабованість Node.js. Однією з поширених потреб у веб-застосунках є робота з базами даних. У цьому посібнику ми розглянемо інтеграцію MongoDB з NestJS за допомогою Mongoose, популярного інструменту моделювання об'єктів MongoDB для Node.js. Наприкінці цього посібника ви отримаєте міцну основу для налаштування проекту NestJS з MongoDB і виконання основних операцій CRUD.

Попередні вимоги

Перед початком переконайтеся, що у вас встановлено:

  • Node.js (версія 12 або вище)
  • Nest CLI
  • MongoDB (також можна використовувати хмарний сервіс, наприклад, MongoDB Atlas)

Налаштування проекту NestJS

Для початку створимо новий проект NestJS за допомогою Nest CLI:

$ nest new nest-mongo-tutorial  
$ cd nest-mongo-tutorial

Встановлення залежностей

Нам потрібно встановити Mongoose та відповідний пакет NestJS:

$ npm install @nestjs/mongoose mongoose

Налаштування підключення до MongoDB

Відкрийте файл app.module.ts і імпортуйте MongooseModule, щоб налаштувати підключення до MongoDB:

import { Module } from '@nestjs/common';  
import { MongooseModule } from '@nestjs/mongoose';  
import { AppController } from './app.controller';  
import { AppService } from './app.service';  
import { ItemsModule } from './items/items.module';  

@Module({  
 imports: [  
 MongooseModule.forRoot('mongodb://localhost/nest'),  
 ItemsModule  
 ],  
 controllers: [AppController],  
 providers: [AppService],  
})  
export class AppModule {}

Замініть 'mongodb://localhost/nest' на ваш рядок підключення до MongoDB. Якщо ви використовуєте MongoDB Atlas, це буде виглядати приблизно так:

'MONGODB_CONNECTION_STRING'

Створення модуля Items

Тепер створимо модуль Items для обробки наших операцій CRUD. Ми використаємо Nest CLI для генерації модуля, сервісу та контролера:

$ nest generate module items  
$ nest generate service items  
$ nest generate controller items

Визначення схеми

У директорії items створіть новий файл під назвою item.schema.ts.

NestJS здобув популярність завдяки своїй надійній архітектурі, що використовує TypeScript та масштабованість Node.js. Однією з поширених потреб у веб-застосунках є робота з базами даних. У цьому посібнику ми розглянемо інтеграцію MongoDB з NestJS за допомогою Mongoose, популярного інструменту моделювання об'єктів MongoDB для Node.js. Наприкінці цього посібника ви отримаєте міцну основу для налаштування проекту NestJS з MongoDB і виконання основних операцій CRUD.

Попередні вимоги

Перед початком переконайтеся, що у вас встановлено:

  • Node.js (версія 12 або вище)
  • Nest CLI
  • MongoDB (також можна використовувати хмарний сервіс, наприклад, MongoDB Atlas)

Налаштування проекту NestJS

Для початку створимо новий проект NestJS за допомогою Nest CLI:

$ nest new nest-mongo-tutorial  
$ cd nest-mongo-tutorial

Встановлення залежностей

Нам потрібно встановити Mongoose та відповідний пакет NestJS:

$ npm install @nestjs/mongoose mongoose

Налаштування підключення до MongoDB

Відкрийте файл app.module.ts і імпортуйте MongooseModule, щоб налаштувати підключення до MongoDB:

import { Module } from '@nestjs/common';  
import { MongooseModule } from '@nestjs/mongoose';  
import { AppController } from './app.controller';  
import { AppService } from './app.service';  
import { ItemsModule } from './items/items.module';  

@Module({  
 imports: [  
 MongooseModule.forRoot('mongodb://localhost/nest'),  
 ItemsModule  
 ],  
 controllers: [AppController],  
 providers: [AppService],  
})  
export class AppModule {}

Замініть 'mongodb://localhost/nest' на ваш рядок підключення до MongoDB. Якщо ви використовуєте MongoDB Atlas, це буде виглядати приблизно так:

'MONGODB_CONNECTION_STRING'

Створення модуля Items

Тепер створимо модуль Items для обробки наших операцій CRUD. Ми використаємо Nest CLI для генерації модуля, сервісу та контролера:

$ nest generate module items  
$ nest generate service items  
$ nest generate controller items

Визначення схеми

У директорії items створіть новий файл під назвою item.schema.ts.

Цей файл визначатиме схему Mongoose для наших елементів:

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';  
import { Document } from 'mongoose';  

@Schema()  
export class Item extends Document {  
 @Prop({ required: true })  
 name: string;  

 @Prop()  
 description: string;  

 @Prop({ required: true })  
 price: number;  

 @Prop({ default: Date.now })  
 createdAt: Date;  
}  

export const ItemSchema = SchemaFactory.createForClass(Item);

Оновлення модуля Items

Оновіть файл items.module.ts, щоб додати схему та модуль Mongoose:

import { Module } from '@nestjs/common';  
import { MongooseModule } from '@nestjs/mongoose';  
import { ItemsService } from './items.service';  
import { ItemsController } from './items.controller';  
import { Item, ItemSchema } from './item.schema';  

@Module({  
 imports: [MongooseModule.forFeature([{ name: Item.name, schema: ItemSchema }])],  
 providers: [ItemsService],  
 controllers: [ItemsController],  
})  
export class ItemsModule {}

Реалізація сервісу Items

Тепер відкрийте items.service.ts і реалізуйте операції CRUD:

import { Injectable } from '@nestjs/common';  
import { InjectModel } from '@nestjs/mongoose';  
import { Model } from 'mongoose';  
import { Item } from './item.schema';  

@Injectable()  
export class ItemsService {  
 constructor(@InjectModel(Item.name) private readonly itemModel: Model) {}  

 async findAll(): Promise {  
 return this.itemModel.find().exec();  
 }  

 async findOne(id: string): Promise {  
 return this.itemModel.findById(id).exec();  
 }  

 async create(item: Item): Promise {  
 const newItem = new this.itemModel(item);  
 return newItem.save();  
 }  

 async update(id: string, item: Item): Promise {  
 return this.itemModel.findByIdAndUpdate(id, item, { new: true }).exec();  
 }  

 async delete(id: string): Promise {  
 return this.itemModel.findByIdAndRemove(id).exec();  
 }  
}

Створення контролера Items

Нарешті, оновимо items.controller.ts, щоб визначити API кінцеві точки:

import { Controller, Get, Post, Put, Delete, Body, Param } from '@nestjs/common';  
import { ItemsService } from './items.service';  
import { Item } from './item.schema';  

@Controller('items')  
export class ItemsController {  
 constructor(private readonly itemsService: ItemsService) {}  

 @Get()  
 async findAll(): Promise {  
 return this.itemsService.findAll();  
 }  

 @Get(':id')  
 async findOne(@Param('id') id: string): Promise {  
 return this.itemsService.findOne(id);  
 }  

 @Post()  
 async create(@Body() item: Item): Promise {  
 return this.itemsService.create(item);  
 }  

 @Put(':id')  
 async update(@Param('id') id: string, @Body() item: Item): Promise {  
 return this.itemsService.update(id, item);  
 }  

 @Delete(':id')  
 async delete(@Param('id') id: string): Promise {  
 return this.itemsService.delete(id);  
 }  
}

Запуск застосунку

Запустіть ваш NestJS застосунок за допомогою команди:

$ npm run start

Ваш NestJS застосунок тепер повинен працювати та бути підключеним до MongoDB. Ви можете протестувати кінцеві точки за допомогою інструментів, таких як Postman або cURL.

Висновок

У цьому посібнику ми розглянули налаштування проекту NestJS, підключення до MongoDB за допомогою Mongoose і виконання основних операцій CRUD. Модульна структура NestJS у поєднанні з потужними можливостями Mongoose надає потужну основу для створення масштабованих застосунків. Успіхів у програмуванні!

Не соромтеся задавати питання або ділитися своїми враженнями в коментарях нижче!

Цей файл визначатиме схему Mongoose для наших елементів:

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';  
import { Document } from 'mongoose';  

@Schema()  
export class Item extends Document {  
 @Prop({ required: true })  
 name: string;  

 @Prop()  
 description: string;  

 @Prop({ required: true })  
 price: number;  

 @Prop({ default: Date.now })  
 createdAt: Date;  
}  

export const ItemSchema = SchemaFactory.createForClass(Item);

Оновлення модуля Items

Оновіть файл items.module.ts, щоб додати схему та модуль Mongoose:

import { Module } from '@nestjs/common';  
import { MongooseModule } from '@nestjs/mongoose';  
import { ItemsService } from './items.service';  
import { ItemsController } from './items.controller';  
import { Item, ItemSchema } from './item.schema';  

@Module({  
 imports: [MongooseModule.forFeature([{ name: Item.name, schema: ItemSchema }])],  
 providers: [ItemsService],  
 controllers: [ItemsController],  
})  
export class ItemsModule {}

Реалізація сервісу Items

Тепер відкрийте items.service.ts і реалізуйте операції CRUD:

import { Injectable } from '@nestjs/common';  
import { InjectModel } from '@nestjs/mongoose';  
import { Model } from 'mongoose';  
import { Item } from './item.schema';  

@Injectable()  
export class ItemsService {  
 constructor(@InjectModel(Item.name) private readonly itemModel: Model) {}  

 async findAll(): Promise {  
 return this.itemModel.find().exec();  
 }  

 async findOne(id: string): Promise {  
 return this.itemModel.findById(id).exec();  
 }  

 async create(item: Item): Promise {  
 const newItem = new this.itemModel(item);  
 return newItem.save();  
 }  

 async update(id: string, item: Item): Promise {  
 return this.itemModel.findByIdAndUpdate(id, item, { new: true }).exec();  
 }  

 async delete(id: string): Promise {  
 return this.itemModel.findByIdAndRemove(id).exec();  
 }  
}

Створення контролера Items

Нарешті, оновимо items.controller.ts, щоб визначити API кінцеві точки:

import { Controller, Get, Post, Put, Delete, Body, Param } from '@nestjs/common';  
import { ItemsService } from './items.service';  
import { Item } from './item.schema';  

@Controller('items')  
export class ItemsController {  
 constructor(private readonly itemsService: ItemsService) {}  

 @Get()  
 async findAll(): Promise {  
 return this.itemsService.findAll();  
 }  

 @Get(':id')  
 async findOne(@Param('id') id: string): Promise {  
 return this.itemsService.findOne(id);  
 }  

 @Post()  
 async create(@Body() item: Item): Promise {  
 return this.itemsService.create(item);  
 }  

 @Put(':id')  
 async update(@Param('id') id: string, @Body() item: Item): Promise {  
 return this.itemsService.update(id, item);  
 }  

 @Delete(':id')  
 async delete(@Param('id') id: string): Promise {  
 return this.itemsService.delete(id);  
 }  
}

Запуск застосунку

Запустіть ваш NestJS застосунок за допомогою команди:

$ npm run start

Ваш NestJS застосунок тепер повинен працювати та бути підключеним до MongoDB. Ви можете протестувати кінцеві точки за допомогою інструментів, таких як Postman або cURL.

Висновок

У цьому посібнику ми розглянули налаштування проекту NestJS, підключення до MongoDB за допомогою Mongoose і виконання основних операцій CRUD. Модульна структура NestJS у поєднанні з потужними можливостями Mongoose надає потужну основу для створення масштабованих застосунків. Успіхів у програмуванні!

Не соромтеся задавати питання або ділитися своїми враженнями в коментарях нижче!

Перекладено з: Using NestJS with MongoDB: A Complete Guide

Leave a Reply

Your email address will not be published. Required fields are marked *