在Nestjs中与Mongoose建立MongoDB连接:创建用户示例
#node #nestjs #mongodb #mongoose

MongoDB Connection in Nestjs

Nestjs是一个强大的Node.js框架,使开发人员能够构建高效,可扩展和可维护的服务器端应用程序。在使用数据库时,由于其灵活性和可扩展性,MongoDB是一个流行的选择。为了与Nestjs应用程序中的MongoDB进行交互,最常用的库之一是Mongoose,它为定义模式,创建模型和执行数据库操作提供了一种优雅而直接的方式。在本文中,我们将探讨如何在Nestjs应用程序中与Mongoose建立MongoDB连接,并使用实际示例创建用户。

先决条件

在我们深入代码之前,请确保已安装以下先决条件:

  1. node.js和npm:确保您在计算机上安装了node.js(与npm一起使用NPM)。

  2. Nestjs Cli:使用以下命令在全球安装Nestjs CLI:

npm install -g @nestjs/cli
  1. mongoDB:确保您在本地运行mongoDB实例或可以访问远程mongodb服务器。

设置Nestjs应用程序

让我们从创建新的Nestjs应用程序开始。打开终端并运行以下命令:

nest new nest-mongoose-example
cd nest-mongoose-example

这将生成一个新的Nestjs项目,名称为Nest-Mongoose-example。

安装依赖项

在您的项目目录中,使用以下命令安装必要的依赖项:

npm install mongoose @nestjs/mongoose
  • mongoose: node.js。
  • 的mongodb库
  • @nestjs/mongoose:官方Nestjs集成猫鼬的官方包。

建立mongoDB连接

为了在Nestjs应用程序中使用Mongoose连接到MongoDB,您需要设置一个模块来管理连接。让我们在src文件夹内创建一个database.module.ts文件,其中包含以下内容:

// database.module.ts
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';

@Module({
  imports: [
    MongooseModule.forRoot('mongodb://localhost/nest-mongoose-example'),
  ],
})
export class DatabaseModule {}

在此模块中,我们使用mongoosemodule.forroot()方法来建立与mongoDB实例的连接。根据您的MongoDB配置调整连接URL(mongodb:// localhost/nest-mongoose-example)。

创建用户模式和模型

接下来,让我们使用Mongoose创建用户模式和模型。使用以下代码创建一个名为user.schema.ts的新文件:

// user.schema.ts
import * as mongoose from 'mongoose';

export const UserSchema = new mongoose.Schema({
  firstName: String,
  lastName: String,
  email: String,
});

export interface User extends mongoose.Document {
  firstName: string;
  lastName: string;
  email: string;
}

此模式定义了MongoDB中用户文档的结构。

创建用户服务

现在,我们已经制定了架构和模型,让我们创建一个服务以与数据库进行交互。在SRC文件夹中创建一个user.service.ts文件,其中包含以下内容:

// user.service.ts
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { User } from './user.schema';

@Injectable()
export class UserService {
  constructor(@InjectModel('User') private readonly userModel: Model<User>) {}

  async createUser(firstName: string, lastName: string, email: string): Promise<User> {
    const newUser = new this.userModel({ firstName, lastName, email });
    return newUser.save();
  }
}

用户服务类使用 @nestjs/mongoose的InjectModel Decorator将用户模型注入服务。 CreateUser方法将用户信息作为输入,并在数据库中创建新用户。

创建用户控制器

要将用户创建功能公开为API端点,让我们创建一个控制器。使用以下代码在SRC文件夹中创建user.controller.ts文件:

// user.controller.ts
import { Controller, Post, Body } from '@nestjs/common';
import { UserService } from './user.service';

@Controller('users')
export class UserController {
  constructor(private readonly userService: UserService) {}

  @Post()
  async createUser(@Body() body: any) {
    const { firstName, lastName, email } = body;
    return this.userService.createUser(firstName, lastName, email);
  }
}

在此控制器中,我们在 /用户路由上定义了一个端口。当请求主体中使用用户数据向此路线提出后请求时,请调用UserService的CreateUser方法来创建新用户。

将所有内容连接在一起

最后,让我们在app.module.ts文件中汇总模块和组件:

// app.module.ts
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { DatabaseModule } from './database.module';
import { UserController } from './user.controller';
import { UserService } from './user.service';
import { UserSchema } from './user.schema';

@Module({
  imports: [DatabaseModule, MongooseModule.forFeature([{ name: 'User', schema: UserSchema }])],
  controllers: [UserController],
  providers: [UserService],
})
export class AppModule {}

在此文件中,我们导入必要的模块,控制器,服务和模式。我们使用mongoosemodule.forfeature()方法将用户模型导入模块。

测试用户创建

要测试用户创建功能,请使用以下命令启动Nestjs应用程序:

npm run start:dev

假设您的服务器在端口3000上本地运行,则可以使用Curl,Postman或您的首选API客户端等工具向http://localhost:3000/users提供以下JSON主体的邮政请求:

{
  "firstName": "John",
  "lastName": "Doe",
  "email": "john.doe@example.com"
}

您应该收到包含新创建的用户文档的响应。

结论

在本文中,我们介绍了在Nestjs应用程序中使用Mongoose建立MongoDB连接的过程。我们创建了一个用户模式,模型,服务和控制器,以使用REST API端点执行用户创建操作。 Nestjs,Mongoose和MongoDB为构建高效且可扩展的服务器端应用程序提供了强大的堆栈,使其成为开发人员的流行选择。