Как подключить и использовать MongoDB в приложении Nest.js
среда, 25 декабря 2024 г.
MongoDB — одна из самых популярных NoSQL баз данных, а в сочетании с Mongoose она отлично подходит для приложений на Nest.js. В этой статье мы разберёмся, как подключить MongoDB к приложению Nest.js, настроить модели, создать CRUD-операции и использовать их в контроллерах.
Шаг 1: Установка необходимых пакетов
Для работы с MongoDB в Nest.js используется библиотека @nestjs/mongoose, которая интегрируется с Mongoose. Установим необходимые зависимости:
npm install @nestjs/mongoose mongoose
npm install --save-dev @types/mongoose
Шаг 2: Подключение к базе данных
В AppModule подключаем MongoDB с помощью MongooseModule:
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
@Module({
imports: [
MongooseModule.forRoot('mongodb://localhost:27017/nest-app', {
useNewUrlParser: true,
useUnifiedTopology: true,
}),
],
})
export class AppModule {}
Замените mongodb://localhost:27017/nest-app на строку подключения к вашей базе данных.
Шаг 3: Создание модели и схемы
Создадим сущность, например, для работы с пользователями.
1. Сгенерируем модуль и сервис:
nest g module users
nest g service users
nest g controller users
2. Создадим схему пользователя:
В users/schemas/user.schema.ts:
import { Schema, Prop, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
@Schema()
export class User extends Document {
@Prop({ required: true })
name: string;
@Prop({ required: true, unique: true })
email: string;
@Prop({ default: Date.now })
createdAt: Date;
}
export const UserSchema = SchemaFactory.createForClass(User);
3. Подключим схему в модуле:
В users/users.module.ts:
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
import { User, UserSchema } from './schemas/user.schema';
@Module({
imports: [
MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]),
],
providers: [UsersService],
controllers: [UsersController],
})
export class UsersModule {}
Шаг 4: Реализация CRUD-операций
Сервис для взаимодействия с базой данных
В users/users.service.ts:
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { User } from './schemas/user.schema';
@Injectable()
export class UsersService {
constructor(@InjectModel(User.name) private userModel: Model<User>) {}
async create(createUserDto: { name: string; email: string }): Promise<User> {
const user = new this.userModel(createUserDto);
return user.save();
}
async findAll(): Promise<User[]> {
return this.userModel.find().exec();
}
async findOne(id: string): Promise<User> {
return this.userModel.findById(id).exec();
}
async update(id: string, updateUserDto: Partial<User>): Promise<User> {
return this.userModel.findByIdAndUpdate(id, updateUserDto, { new: true }).exec();
}
async delete(id: string): Promise<User> {
return this.userModel.findByIdAndRemove(id).exec();
}
}
Контроллер для обработки запросов
В users/users.controller.ts:
import { Controller, Get, Post, Body, Param, Patch, Delete } from '@nestjs/common';
import { UsersService } from './users.service';
import { User } from './schemas/user.schema';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Post()
async create(@Body() createUserDto: { name: string; email: string }): Promise<User> {
return this.usersService.create(createUserDto);
}
@Get()
async findAll(): Promise<User[]> {
return this.usersService.findAll();
}
@Get(':id')
async findOne(@Param('id') id: string): Promise<User> {
return this.usersService.findOne(id);
}
@Patch(':id')
async update(@Param('id') id: string, @Body() updateUserDto: Partial<User>): Promise<User> {
return this.usersService.update(id, updateUserDto);
}
@Delete(':id')
async delete(@Param('id') id: string): Promise<User> {
return this.usersService.delete(id);
}
}
Шаг 5: Тестирование
Теперь ваше приложение готово к работе с MongoDB. Вы можете использовать Postman, Curl или любую другую утилиту для отправки запросов:
1. Создать пользователя:
POST /users
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com"
}
2. Получить всех пользователей:
GET /users
3. Обновить пользователя:
PATCH /users/<id>
Content-Type: application/json
{
"name": "Jane Doe"
}
4. Удалить пользователя:
DELETE /users/<id>
MongoDB в связке с Mongoose и Nest.js позволяет быстро и эффективно разрабатывать серверные приложения с гибкой работой с данными. Используя описанную структуру, вы можете легко масштабировать приложение и добавлять новые сущности.
Александр
Fullstack-разработчик в МосквеПрофессиональная разработка веб-приложений на Node.js с использованием современных frontend и backend фреймворков. Создание, продвижение, поддержка и обслуживание сайтов. Эффективно, прибыльно.