Nest.js を使用して
node の MongoDB データベースに接続するにはどうすればよいですか?次の記事では、ノードフレームワーク Nest.js が MongoDB をどのように利用しているかを紹介しますので、ご参考になれば幸いです。
Nest をデータベースに接続する方法を学習するとき、必ずデータベースの選択という問題に遭遇します。ここでは、著者は簡単な手順を記録するために MongoDB
を選択しました。使用。さまざまなニーズに応じて、適切なデータベースを選択できます。
更なる学習を促進するためにフォローアップ ドキュメントを投稿Nest 中国語ドキュメント,MongoDB 初心者チュートリアル
#データベースの概要
MongoDB は、分散ファイル ストレージに基づくデータベースです。 C言語で書かれています。 WEB アプリケーションにスケーラブルで高性能なデータ ストレージ ソリューションを提供するように設計されています。
MongoDB は、リレーショナル データベースと非リレーショナル データベースの中間の製品であり、非リレーショナル データベースの中で最も機能が豊富で、最もリレーショナル データベースに似ています。
データベースの選択
- 市場には、誰もが選択できる成熟したデータベースが多数あります。
- さまざまな資料によると、著者は大規模プロジェクトには
PostgreSql
を使用し、小規模プロジェクトにはを使用する必要があると結論付けました。 MongoDB
ということで、筆者も一緒に学んでいきますが、今回はスキルを磨くために小さなプロジェクトをやりたいので、まずはMongoDB
を使って様子を見ていきます。 - 異なる意見がある場合は、コメント欄でお気軽に議論してください。
基本サービスの構成
コンピュータにインストールされていることを確認してください
MongoDB
No覚えておいてください 環境設定が完了したら、起動後に自動的に開始することもできますが、自分で開始することもできます。
#. 簡単に紹介しますと、
は
MongoDB-
# を操作する
は js の実行環境です。Nodejs
ドライバー ライブラリです。#MongoDB
はデータベース、
Nodejs 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 {}
- module
- (モジュール)
Controller
(コントローラー) Service - (プロバイダー)
スキーマが含まれます
(データモデル)
Nest は主にMongoDB
の追加、削除、変更、確認に使用しますが、現時点ではこれらのモジュールで十分です。これらのモジュールについて簡単に紹介します。
- というのも、 mongoose
- Schema
-
Mongoose
Scheme
Schema
は- MongoDB## にマップされます # コレクションと定義コレクション内のドキュメントの構造。
- Schema
はモデルの定義に使用され、モデルは最下層の
通常の方法MongoDB
ドキュメントの作成と読み取りを担当します。スキーマ
NestJS
の組み込みデコレータを使用して作成することも、自分で使用することもできますMongoose
。デコレータを使用して - Schema
を作成すると、参照が大幅に削減され、コードの可読性が向上します。ここの筆者は公式推奨のデコレータで作成する方法を使っていますが、結局のところNestを使っているので特別なものは使えないんですね、うーん。
<pre class='brush:php;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>
モジュールでは後ほど他の機能とともに紹介します。
Service
-
控制器的目的是接收应用的特定请求。路由机制控制哪个控制器接收哪些请求。通常,每个控制器有多个路由,不同的路由可以执行不同的操作。
/* 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 中引入。
Controller
-
控制器的目的是接收应用的特定请求。路由机制控制哪个控制器接收哪些请求。通常,每个控制器有多个路由,不同的路由可以执行不同的操作。
/* 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); } }
Moudle
模块是具有
@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 {}
- 以上我们的基础布局完成,可以进行接口检验了
接口检验
- 处理这些配置我们还在 main.ts 文件中配置了全局路由
app.setGlobalPrefix('api');
意思就是所有请求前面会有一个/api/
- 这里我们用的
PostMan
和MongoDB Compass
官方推荐的可视化工具查看效果
POST 增
这里我使用
POST
请求,路由为/api/user/createUser
因为要限制请求参数的数据类型所以这里方式为application/json
因为这里我们之前定义的 User 数据模型为 name,age,height, 所以请求里面只需要这几个参数即可,别的就算写进去也添加不到集合中
Postman
打开 MongoDB Compass 查看数据
可以看到我们已经添加到数据库中一条数据,接下来我们在添加两条,方便等会的查询/删除/更改操作
GET 查所有
这里我使用
GET
请求,,路由为/api/user/findAll
因为这里是查 User 集合内所有数据,所以不用添加请求参数-
Postman
打开 MongoDB Compass 查看数据
可以看到我们已经查询到数据库中刚才在
User
集合中添加的三条数据切记要点REFRESH
建不然软件不会自己刷新
GET 查单个用户
这里我使用
GET
请求,路由为/api/user/findOne
因为这里是查 User 集合内对应搜索条件的数据集合,这里我们用的是name 去查询的。也可以用唯一值 id 去查询。Postman
可以看到返回结果是一个集合,了解更多查询方式可以看下官网
PUT 改
这里我使用
PUT
请求,路由为/api/user/:sid
因为要限制请求参数的数据类型所以这里方式为application/json
因为这里我们之前定义的 User 数据模型为 age,height, 所以请求里面只需要这几个参数即可,别的就算写进去也添加不到集合中,我们这里传入数据库中小明的_id
61eea1b4144ea374a5b8455a
传入Param
中 ,然后把要修改的内容放入Body
中-
Postman
打开 MongoDB Compass 查看数据
可以看到我们已经把小明的年龄与身高做了修改
DELETE 刪除
這裡我使用
DELETE
請求,路由為/api/user/:sid
#因為要限制請求參數的資料型別所以這裡方式為application/json
#我們這裡傳入資料庫中小明的_id
61eea1b4144ea374a5b8455a
傳入Param
中,並發起請求Postman
- ##開啟MongoDB Compass 查看資料
- #可以看到小明的資訊已經不存在了
- 至此我們已經完成在
- Nest.js
中使用
Mongoose 對MongoDB數據的基礎操作。並完成了在 Nest 中使用裝飾器來建立 資料模型
Schema。
看文件好像也可以使用 Nest 內建的 - TypeORM 來建立模型感興趣的小夥伴可以去看一下。回頭我學習其他資料庫連線時在去翻閱看看怎麼操作下。 Nest 要學的還有很多,管道,中間件,攔截器,路由守衛等,這些我是準備在寫小demo 中去使用來加深個人理解,不然只是單純的看文檔,難以理解,這裡就先不贅述了~ 目前我知道的就是用管道做請求類型判斷是很香的hhh感興趣的小伙伴可以去了解下
- 類驗證器
nodejs 教學!
以上がNest.js を使用してノード内の MongoDB データベースに接続する方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

node、nvm与npm的区别:1、nodejs是项目开发时所需要的代码库,nvm是nodejs版本管理工具,npm是nodejs包管理工具;2、nodejs能够使得javascript能够脱离浏览器运行,nvm能够管理nodejs和npm的版本,npm能够管理nodejs的第三方插件。

Vercel是什么?本篇文章带大家了解一下Vercel,并介绍一下在Vercel中部署 Node 服务的方法,希望对大家有所帮助!

node怎么爬取数据?下面本篇文章给大家分享一个node爬虫实例,聊聊利用node抓取小说章节的方法,希望对大家有所帮助!

node导出模块的两种方式:1、利用exports,该方法可以通过添加属性的方式导出,并且可以导出多个成员;2、利用“module.exports”,该方法可以直接通过为“module.exports”赋值的方式导出模块,只能导出单个成员。

安装node时会自动安装npm;npm是nodejs平台默认的包管理工具,新版本的nodejs已经集成了npm,所以npm会随同nodejs一起安装,安装完成后可以利用“npm -v”命令查看是否安装成功。

node中没有包含dom和bom;bom是指浏览器对象模型,bom是指文档对象模型,而node中采用ecmascript进行编码,并且没有浏览器也没有文档,是JavaScript运行在后端的环境平台,因此node中没有包含dom和bom。

本篇文章带大家聊聊Node.js中的path模块,介绍一下path的常见使用场景、执行机制,以及常用工具函数,希望对大家有所帮助!


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

ホットトピック



