NestJsはMongooseを使用してMongoDBを操作する

NestJsはMongooseを使用してMongoDBを操作する

最近、NestJs フレームワークを学び始めました。学習コストは他のフレームワークよりもはるかに高くなります。
登録構成は比較的複雑で、最初は少し混乱しますが、これは他のフレームワークと比較してより標準化され厳密な性質を反映しています。大規模プロジェクトの安定的かつ堅牢な使用を保証します!

ノードの基本フレームワーク Express と Koa を学習する場合。データベース操作は常に SQL ステートメントを記述することによって実装されてきました。必要なことは何でも書いてください。これは非常に厳格で柔軟性に欠けるように思えます。その後、NestJs が OOP 指向のプログラミングであること (NestJs は OOP 指向の TypeScript も使用できます) を知り、データベース操作をオブジェクトの形式で表現できることに気付きました。データベース内の各テーブル (スキーマ) は、Nest フレームワーク内のオブジェクトと見なすことができます。これにより、データベース操作が非常に柔軟になります。

例えば: (これは任意のテーブルの構造です)

ここに画像の説明を挿入

NestJsではオブジェクトとして見ることができます

ここに画像の説明を挿入

これにより、データベース内の各テーブルを操作するのが非常に簡単になります。
ここでは、mongoDBのリンク操作を例に挙げます。

公式ドキュメントに従ってmongooseを使用する

まず、必要な依存関係をインストールします

npm をインストール --save @nestjs/mongoose mongoose

Taobaoミラーを追加できます:

–レジストリ=https://registry.npm.taobao.org

私はこれに非常に習熟しており、使用すると非常に便利です。ダウンロード速度が大幅に速くなります

インストールが完了したら、app.module.tsに設定を追加します。

アプリモジュール

ここに画像の説明を挿入

対応する設定をインポートに追加します:[]

MongooseModule.forRoot('mongodb://localhost/test')
// 以下は MongoDB の場所です (必要に応じて)
対応する依存関係を追加します。import { Module } from '@nestjs/common';
'@nestjs/mongoose' から MongooseModule をインポートします。

保存するとコンソールで確認できます
非推奨警告: 現在の URL 文字列パーサーは非推奨であり、将来のバージョンでは削除される予定です。新しいパーサーを使用するには、MongoClient.connect にオプション { useNewUrlParser: true } を渡します。
似たような文章ですね。これはリンクが成功したことを意味します。

次にモデル(スキーマ)を挿入します
対応するモジュール フォルダーにスキーマ フォルダーを作成します。 xx.schema.ts を作成する

たとえば、私の場合はusers/schemas/users.schema.tsです。

'mongoose' から * を mongoose としてインポートします

エクスポートconst UserSchema = new mongoose.Schema(
  {
    id: 番号、
    名前: 文字列、
    導入: 文字列、
    headurl: 文字列、
    bigurl: 文字列、
    ユーザー名: 文字列、
    パスワード: 文字列、
  },
  { コレクション: 'musicers'、バージョンキー: false },
)

これは上図のテーブル構造に対応します(コレクション:MongoDB ではテーブルとみなすことができます)。
次に、対応するusers.module.tsモジュールに設定を追加します。

'@nestjs/common' からモジュールをインポートします。
'@nestjs/mongoose' から { MongooseModule、getModelToken } をインポートします。
'./users.controller' から {UsersController} をインポートします。
'./services/users.service' から {UsersService} をインポートします。
'./schemas/users.schemas' から { UserSchema } をインポートします。

@モジュール({
  輸入: [
  //ここに設定を追加します。対応するインポート モジュール (内部のブラケット構造に注意してください。邪魔にならないようにしてください。私はここで長い間行き詰まっていました)
    MongooseModule.forFeature([
      { 名前: 'User'、スキーマ: UserSchema }
    ])
  ]、
  コントローラ: [UsersController],
  プロバイダー:
    ユーザーサービス、
   ]、
})
クラスUsersModuleをエクスポートします{}

この設定後。サービス面でも運営できます

サービス => users/users.service.ts

検索してテストしてみましょう

'mongoose' から {Model} をインポートします。
'@nestjs/common' から Injectable をインポートします。
'@nestjs/mongoose' から InjectModel をインポートします。
'../interface/users.interface' から { User } をインポートします。
'../interface/user-service.interface' から { IUserService } をインポートします。


@インジェクタブル()
エクスポートクラスUsersServiceはIUserServiceを実装します{

  コンストラクター(@InjectModel('User') プライベート読み取り専用 userModel: Model<User>) {}
  
  プライベート静的ユーザー:User[] = [ ]

  非同期findAll():Promise<User[]>{
    //UsersService.users を返す
    this.userModel.find({}) を待機して戻ります。
    //(ここですべてを見つけるためにテストします)
  }

}

コントローラー => users/users.controller.ts

@Controller('ユーザー')
クラスUsersControllerをエクスポートします。
  コンストラクター(プライベート読み取り専用ユーザーサービス: UsersService) { }

@Get('getall')
  // @UseGuards(AuthGuard('jwt'))
  非同期findAll():Promise<User[]> {
    this.userservice.findAll() を待つ
  }
}

インターフェイスを開きます。ここでは、main.ts で 3001 がカスタマイズされています。ご自身の状況に合わせて変更していただければ、
http://localhost:3001/users/getall

ここに画像の説明を挿入

結果が出ました

ここに画像の説明を挿入

出力が完了しました。その他の操作も同様の手順に従って実行されます。

以上で、Mongoose with NestJs を使って MongoDB を操作する方法についての記事は終了です。MongoDB を NestJs で操作する方法の詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nest.js 認証検証方法の例
  • Nest.js 環境変数の設定とシリアル化の詳細な説明
  • expressを使用して複数の静的ディレクトリを提供するためにnest.jsを使用する方法

<<:  Docker ログが多すぎてディスクがいっぱいになる場合の対処方法

>>:  MySQL 5.7 のキーワードと予約語の詳細な説明

推薦する

SSH経由でローカルLinux仮想マシンに接続するプロセスを記録する

実験環境:物理マシン Windows 10 x64物理NIC情報IPv4 アドレス: 192.168...

LinuxシステムでのSystemC環境設定方法

以下はcentos7での設定方法ですsystemc ソース パッケージをダウンロード: System...

MYSQLは継続サインイン機能を実装しており、サインイン後1日経過すると最初から開始します(SQL文)

1. テストテーブルを作成する テーブル `testsign` を作成します ( `userid`...

略語マークと頭字語マーク

<abbr>タグと<acronym>タグは、Web ページに表示される略語と...

なぜCSSをヘッドタグに配置する必要があるのか

考えてみてください。なぜcss 、 javascriptのようにbodyタグの末尾ではなく、 hea...

XHTML Web ページ チュートリアル

この記事は主に、初心者に XHTML の基本的な知識と、XHTML と HTML の違いを理解しても...

ページに間隔を空けてグリッドレイアウトを完璧に実装する方法

典型的なレイアウト例上の写真のように、正方形の真ん中に一定の隙間があり、その隙間は固定されています。...

VUE uni-app でよく使用される API についての簡単な説明

目次1. ルーティングとページジャンプ2. インターフェース要約する1. ルーティングとページジャン...

Vueは州、都市、地区のカスケード選択を実現します

最近、省、市、地区のカスケード選択効果を実装する必要があります。省、市、地区のデータはすべてローカル...

iostat を使用して Linux ハードディスクの IO パフォーマンスを表示する方法

TOP 観察: IO 待機に占められる CPU 時間の割合。30% を超えると、IO の負荷が高くな...

Linux の一般的なハードディスク管理コマンドの紹介

目次1. dfコマンド2. duコマンド3. fsckファイルシステム修復コマンド4. ディスクステ...

JavaScript 配列の Reduce() メソッドの構文と例の分析

序文Reduce() メソッドは関数を累積器として受け取り、配列内の各値 (左から右へ) が単一の値...

Vue3 でマークダウン エディター コンポーネントを使用する方法

目次インストールコンポーネントのインポート基本的な使い方保存したマークダウンまたは HTML テキス...

Nginx 正規表現関連のパラメータとルールの紹介

序文最近、私はクライアントのサーバー構成を支援しており、Nginx 構成ファイルを頻繁に変更していま...

VMware ESXi 5.5 の展開および構成図のプロセス

目次1. インストール要件2. OSイメージのダウンロード3. VMware Workstation...