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 のキーワードと予約語の詳細な説明

推薦する

CentOS7でXShellとネットワーク設定を接続する方法

1. Linuxネットワーク構成ネットワークを構成する前に、まずローカル IPv4 アドレスやデフォ...

CentOS 7 に Docker 1.8 をインストールする詳細な手順

Docker は、次の CentOS バージョンでの実行をサポートしています。 • CentOS 7...

Vue の動的コンポーネントと非同期コンポーネントの詳細な理解

1. 動的コンポーネント <!DOCTYPE html> <html> &l...

Centos7 システムでの MySQL マスター スレーブ同期構成スキーム

序文最近、高可用性プロジェクトに取り組む際には、データの同期が必要になっています。ノードが 2 つし...

LinuxサーバのSSHクラッキング防止方法(推奨)

1. Linuxサーバーは、/etc/hosts.denyを設定して、相手のIPがSSH経由でサー...

Vueでミックスインを使用する方法

目次序文使い方要約する序文Vue にはコードの再利用に使われる mixins という設定項目がありま...

MySQL でトリガーを無効化および有効化するチュートリアル [推奨]

MYSQL を使用する場合、トリガーがよく使用されますが、不適切な使用によって問題が発生する場合が...

Vue ページに img 画像を導入する方法

HTMLを学ぶとき、画像タグ<img>は画像を導入します <img src=&qu...

Vue.js スタイルレイアウト Flutter ビジネス開発共通スキル

シャドウスタイルにおけるフラッターとCSSの対応UIによって指定されたCSSスタイル 幅: 75px...

CentOS7 64 ビットでの MySQL 5.7 のインストールと設定のチュートリアル

インストール環境: CentOS7 64ビットMINI版、MySQL5.7をインストール1. YUM...

ウィンドウ環境で VScode を使用して仮想マシン MySQL に接続する方法

1. 仮想マシン側1. MySQLの設定ファイルを見つける:sudo vim /etc/mysql/...

React-Native環境のセットアップと基本的な紹介

環境の準備1. 環境構築React Native 中国語ウェブサイト2. 開発ツール フロントエンド...

CSS 垂直センタリングの代替実装コードの詳細な説明(非従来型)

序文ご存知のとおり、「CSS で要素を垂直方向に中央揃えするにはどうすればよいか」という質問は、すで...

htmlはハイパーリンク付きの新しいウィンドウを開き、ウィンドウのプロパティを制御できます。

1. HTMLハイパーリンクによって開かれるウィンドウのサイズコードをコピーコードは次のとおりです...

数十行のjsを使用してクールなキャンバスインタラクティブ効果を実現する方法を教えます

目次1. 円を描く2. マウスで動かした円3. マウスでドラッグした粒子4. カラーグラデーション粒...