Nest.js を使用して
node の MongoDB データベースに接続するにはどうすればよいですか?次の記事では、ノードフレームワーク Nest.js が MongoDB をどのように利用しているかを紹介しますので、ご参考になれば幸いです。
Nest をデータベースに接続する方法を学習するとき、必ずデータベースの選択という問題に遭遇します。ここでは、著者は簡単な手順を記録するために MongoDB
を選択しました。使用。さまざまなニーズに応じて、適切なデータベースを選択できます。
更なる学習を促進するためにフォローアップ ドキュメントを投稿Nest 中国語ドキュメント,MongoDB 初心者チュートリアル
MongoDB は、分散ファイル ストレージに基づくデータベースです。 C言語で書かれています。 WEB アプリケーションにスケーラブルで高性能なデータ ストレージ ソリューションを提供するように設計されています。
MongoDB は、リレーショナル データベースと非リレーショナル データベースの中間の製品であり、非リレーショナル データベースの中で最も機能が豊富で、最もリレーショナル データベースに似ています。
PostgreSql
を使用し、小規模プロジェクトには を使用する必要があると結論付けました。 MongoDB
ということで、筆者も一緒に学んでいきますが、今回はスキルを磨くために小さなプロジェクトをやりたいので、まずは MongoDB
を使って様子を見ていきます。 コンピュータにインストールされていることを確認してくださいMongoDB
No
覚えておいてください 環境設定が完了したら、起動後に自動的に開始することもできますが、自分で開始することもできます。
# を操作する Nodejs
ドライバー ライブラリです。 #MongoDB
はデータベース、
Nodejs
Mongodb を直接操作しません。インターフェイスを提供するには、対応するドライバーが必要になります。
Nest プロジェクトに依存関係をインストールします。インストール方法は 2 つあります。自分で選択してください。
$ npm install --save @nestjs/mongoose mongoose // NPM 安装 $ yarn add @nestjs/mongoose mongoose // YARN 安装复制代码
インストールが完了したら、これを AppModule ファイルに導入します。見てみましょう/* app.module.ts */ import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; // 我自己准备的 USER 模块 import { UserModule } from './user/user.module'; // 引入 Mongoose import { MongooseModule } from '@nestjs/mongoose'; @Module({ // 用 forRoot 方法连接数据库 imports: [UserModule, MongooseModule.forRoot('mongodb://localhost/test')], controllers: [AppController], providers: [AppService], }) export class AppModule {}
Controller
(コントローラー)スキーマが含まれます(データモデル)
Nest は主に MongoDB
の追加、削除、変更、確認に使用しますが、現時点ではこれらのモジュールで十分です。 これらのモジュールについて簡単に紹介します。
Mongoose
はモデルの定義に使用され、モデルは最下層の MongoDB
ドキュメントの作成と読み取りを担当します。 スキーマ
NestJS
の組み込みデコレータを使用して作成することも、自分で使用することもできます Mongoose
を作成すると、参照が大幅に削減され、コードの可読性が向上します。ここの筆者は公式推奨のデコレータで作成する方法を使っていますが、結局のところNestを使っているので特別なものは使えないんですね、うーん。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;"> /* user.schema.ts */
import { Prop, Schema, SchemaFactory } from &#39;@nestjs/mongoose&#39;;
// @Prop 装饰器接受一个可选的参数,通过这个,你可以指示这个属性是否是必须的,是否需要默认值,或者是标记它作为一个常量,下面是例子
// SchemaFactory 是 mongoose 内置的一个方法做用是读取模式文档 并创建 Schema 对象
import { Document } from &#39;mongoose&#39;;
export type UserDocument = User & Document;
@Schema()
export class User extends Document {
@Prop()
name: string;
// 设置值为必填
@Prop({ required: true })
age: number;
@Prop()
height: number;
}
export const UserSchema = SchemaFactory.createForClass(User);</pre><div class="contentsignin">ログイン後にコピー</div></div>
モジュールでは後ほど他の機能とともに紹介します。
控制器的目的是接收应用的特定请求。路由机制控制哪个控制器接收哪些请求。通常,每个控制器有多个路由,不同的路由可以执行不同的操作。
/* user.service.ts */ import { Model } from 'mongoose'; import { InjectModel } from '@nestjs/mongoose'; import { User, UserDocument } from 'src/schema/user.schema'; import { CreateUserDto } from './user.dto'; @Injectable() export class UserService { // 注册Schema后,可以使用 @InjectModel() 装饰器将 User 模型注入到 UserService 中: constructor(@InjectModel('User') private userTest: Model<UserDocument>) {} // 添加 async create(createUserDto: CreateUserDto): Promise<User> { const createUser = new this.userTest(createUserDto); const temp = await createUser.save(); return temp; } // 查找 async findAll(): Promise<User[]> { // 这里是异步的 const temp = await this.userTest.find().exec(); return temp; } // 查找 async findOne(name: string): Promise<User[]> { // 这里是异步的 const temp = await this.userTest.find({ name }); return temp; } // 删除 async delete(sid: number) { // 这里是异步的 remove 方法删除成功并返回相应的个数 const temp = await this.userTest.remove({ _id: sid }); return temp; } // 修改 async updateUser(sid: string, data: any) { // 这里是异步的 remove 方法删除成功并返回相应的个数 const temp = await this.userTest.updateOne({ _id: sid }, { $set: data }); return temp; } }
等下和其他功能一起在 Module 中引入。
控制器的目的是接收应用的特定请求。路由机制控制哪个控制器接收哪些请求。通常,每个控制器有多个路由,不同的路由可以执行不同的操作。
/* user.controller.ts */ // 引入 Nest.js 内置的各个功能 import { Body, Controller, Delete, Get, Param, Post, Put, Query } from '@nestjs/common'; // 引入用户服务 import { UserService } from './user.service'; // 引入创建用户 DTO 用于限制从接口处传来的参数 import { CreateUserDto } from './user.dto'; // 配置局部路由 @Controller('user') export class UserController { constructor(private readonly userService: UserService) {} // 创建user路由 user/createUser @Post('createUser') async createUser(@Body() body: CreateUserDto) { return this.userService.create(body); } //查找所有 user 路由 @Get('findAll') async findAll() { return this.userService.findAll(); } // 查找某一个用户路由 @Get('findOne') async findOne(@Query() query: any) { return this.userService.findOne(query.name); } // 删除一个用户的路由 @Delete(':sid') deleteUser(@Param() param: any) { return this.userService.delete(param.sid); } // 更改用户信息的路由 @Put(':sid') updateUser(@Body() body: any, @Param() param: any) { return this.userService.updateUser(param.sid, body); } }
模块是具有 @Module()
装饰器的类。 @Module()
装饰器提供了元数据,Nest 用它来组织应用程序结构。
我们把以上内容引入到我们的 User 模块中
/* user.module.ts */ import { Module } from '@nestjs/common'; import { UserController } from './user.controller'; import { UserService } from './user.service'; import { MongooseModule } from '@nestjs/mongoose'; import { UserSchema } from 'src/schema/user.schema'; @Module({ // MongooseModule提供了forFeature()方法来配置模块,包括定义哪些模型应该注册在当前范围中。 // 如果你还想在另外的模块中使用这个模型,将MongooseModule添加到CatsModule的exports部分并在其他模块中导入CatsModule。 // 这里的 name:'User' 为数据库表名称与 service 中注入的表名称对应两者不一样会报错 imports: [MongooseModule.forFeature([{ name: 'User', schema: UserSchema }])], controllers: [UserController], providers: [UserService], }) export class UserModule {}
app.setGlobalPrefix('api');
意思就是所有请求前面会有一个 /api/
PostMan
和 MongoDB Compass
官方推荐的可视化工具查看效果这里我使用 POST
请求,路由为/api/user/createUser
因为要限制请求参数的数据类型所以这里方式为 application/json
因为这里我们之前定义的 User 数据模型为 name,age,height, 所以请求里面只需要这几个参数即可,别的就算写进去也添加不到集合中
Postman
打开 MongoDB Compass 查看数据
可以看到我们已经添加到数据库中一条数据,接下来我们在添加两条,方便等会的查询/删除/更改操作
这里我使用 GET
请求,,路由为/api/user/findAll
因为这里是查 User 集合内所有数据,所以不用添加请求参数
Postman
打开 MongoDB Compass 查看数据
可以看到我们已经查询到数据库中刚才在 User
集合中添加的三条数据切记要点 REFRESH
建不然软件不会自己刷新
这里我使用 GET
请求,路由为/api/user/findOne
因为这里是查 User 集合内对应搜索条件的数据集合,这里我们用的是name 去查询的。也可以用唯一值 id 去查询。
Postman
可以看到返回结果是一个集合,了解更多查询方式可以看下官网
这里我使用 PUT
请求,路由为/api/user/:sid
因为要限制请求参数的数据类型所以这里方式为 application/json
因为这里我们之前定义的 User 数据模型为 age,height, 所以请求里面只需要这几个参数即可,别的就算写进去也添加不到集合中,我们这里传入数据库中小明的_id 61eea1b4144ea374a5b8455a
传入 Param
中 ,然后把要修改的内容放入 Body
中
Postman
打开 MongoDB Compass 查看数据
可以看到我们已经把小明的年龄与身高做了修改
這裡我使用DELETE
請求,路由為/api/user/:sid
#因為要限制請求參數的資料型別所以這裡方式為application/json
#我們這裡傳入資料庫中小明的_id 61eea1b4144ea374a5b8455a
傳入Param
中,並發起請求
Postman
中使用
Mongoose 對MongoDB 數據的基礎操作。並完成了在 Nest 中使用裝飾器來建立 資料模型
Schema 。
nodejs 教學!
以上がNest.js を使用してノード内の MongoDB データベースに接続する方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。