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