NodeJSとMongoDBを接続してください


完全なスタック開発に入るには、サーバー側のコードとデータベースで動作することができます.JavaScriptで動作している場合は、ノードを使用している可能性があります.
この記事は、すでにそれぞれの基本を持っていると仮定します.ここでの主なトピックはどのように我々はノードとmongoをお互いに話を取得することです.

ステップ1:訪問MongoDBのウェブサイト


新しいユーザとしてログインしたり登録したりする必要があります.我々がすでに勢いを得ている単純な最初のステップ.

ステップ2 :クラスタを作成し、接続する


サイトにまだクラスタがない場合は、1つを作成する必要があります.私がゼロのクラスタを持っていたので、久しぶりです.
ない場合は、心配しないでください、どこか下にある画面には、“新しいクラスタを作成する”と言う緑色のボタンがあるはずです.私のアドバイスは、私は設定のいずれかではなく、クラスタの支払いをしていないとして、ちょうどデフォルトの設定を維持し、無料のクラスタを作成することを確認します.

あなたがクラスタを持っているか、あなたがすでに1を持っているならば、あなたのスクリーンは上記の絵が好きです.次に、クラスタ名の下にある小さな接続ボタンをクリックする必要があります.そして、それはあなたにこの画面を示します.
アプリケーションを接続するというミドルオプションをクリックします.

我々はほとんどのウェブサイト上で行われます.あなたがこの接続ポップアップのステップ1をするのを確実にしてください-あなたのドライバーを選択してください(あなたがこれを読んでいるならば、おそらくノードです)、そして、バージョンが適切であることを確認してください.私たちがノード14の上にいるので、私はあなたが3.6またはそれ以降のオプションを選択しておくのにすべて安全であると仮定します.
次に、[コピー]ボタンをクリックしてアプリケーションを実際にデータベースにアクセスする方法を示します.交換する必要があります<password> あなたの実際のパスワードと<database> あなたの実際のデータベース名で.潜在的に、あなたは交換する必要があります<username> しかし、通常、私は文字列をコピーする前に私のためにそれを自動挿入します.

ステップ3 :セットアップ


今、我々はあなたのアプリケーションコードに行かなければなりません.どこであなたのサーバーコードの生活はノードとmongoの間の接続を作成するためにクライアントが必要になります.ここに私のプロジェクトディレクトリの簡単な表現があります.
-client-> (front-end code)
-server
  |__db
  |  |_client.js
  |  |_index.js
  |
  |__server.js
  |__.env
まず上を見ましょうclient.js それが最初の部分であるので、我々は我々の接続を確立する必要があります.
import dotenv from 'dotenv';
import { MongoClient } from 'mongodb';

dotenv.config();

const client = new MongoClient(
  process.env.MONGODB_URI,
  {
    useUnifiedTopology: true,
  },
);

// Close the connection after the server is shut down
(async () => {
  await client.connect();

  // 'CTRL + C' -> 'SIGINT' means signal interrupt i.e. server shut down
  process.on('SIGINT', () => {
    client.close().then(() => {
      console.info('SIGINT received: DB connection is closing');

      // Avoid plugging up ports - ensures all processes are stopped
      process.exit(0);
    });
  });
})();

export default client;
たった今そこに行くので、チャンクでそれを見ましょう.
まず第一に我々はいくつかの輸入品を持っている.The dotenv インポートはコピーされた文字列を最後のステップから保存するだけです.我々のクラスタのMongoのウェブサイトからコピーされたその長いストリングは.env あなたは私のディレクトリ構造を見ました.The dotenv.config() 単に私が私が2007年に宣言したそれらの環境変数を使用するのを許します.env こちらのファイルで.
The process.env.MONGODB_URI コピーした実際の文字列に置き換えることができます.それで、あなたがセットアップAを望まないならば.env する必要はありません.
現在MongoClient インポートは、それが何の役割であるかについて、かなり自明です.The const client = 我々が新しい宣言をする部分MongoClient 引数を渡します.
  • 最初は接続文字列です(必要ならここで文字列を貼り付けるだけです).
  • 追加オプションを渡すオブジェクトuseUnifiedTopology: true
  • import dotenv from 'dotenv';
    import { MongoClient } from 'mongodb';
    
    dotenv.config();
    
    const client = new MongoClient(
      process.env.MONGODB_URI,
      {
        useUnifiedTopology: true,
      },
    );
    
    正直に言うと、私はなぜ100 %ではないuseUnifiedTopology: true 我々を助けます.こちらですMongo's Reference Page on it . 私は読んで、最も基本的な意味では、将来のアップデートを容易にするための一歩のようだ.しかし、私は全く間違っていることができました.
    コメントを私に知らせてくださいuseUnifiedTopology そうです!
    Alright、次のコードのチャンク.
    明らかに我々はエクスポートclient 我々はので、ちょうどそのビットを得ることができます作成しました.
    現在、このコードの大部分は非同期IFEです.それは私たちの接続を確立し、サーバーがシャットダウンして接続を閉じるときの目的です.そこのコメントは、特定の部分を明確にするのを助けるべきです.
  • MongoClientオブジェクトから利用できるメソッドを待って接続しますconnect() . かなり簡単.
  • その後、一度我々は得るSIGINT サーバからデータベース接続を閉じます.私たちの両親は私たち自身の後にクリーンアップすることを教えたので、それは私たちの部屋だけではない!
  • // Close the connection after the server is shut down
    (async () => {
      await client.connect();
    
      // 'CTRL + C' -> 'SIGINT' means signal interrupt i.e. server shut down
      process.on('SIGINT', () => {
        client.close().then(() => {
          console.info('SIGINT received: DB connection is closing');
    
          // Avoid plugging up ports - ensures all processes are stopped
          process.exit(0);
        });
      });
    })();
    
    export default client;
    

    Step 4 :クライアントを使う


    どうやってこれを使うのclient それは私たちのために接続していますか?ここから1つの方法がありますdb/index.js .
    import client from './client';
    
    // GOOD
    export const addNewUser = async (newUser) => {
      try {
        return await client.db('throwaway').collection('users').insertOne(newUser);
      } catch (err) {
        throw new Error(err);
      }
    };
    
  • 我々のファイルから我々のクライアントを輸入してください
  • その後、単にtry/catchブロックのようにそれを使用します
  • client
  • .db(<NAME OF YOUR DATABASE>)
  • .collection(<NAME OF YOUR COLLECTION>)
  • .<METHOD YOU NEED>
  • ここで注意してください.newUser クライアント側リクエストから渡されるオブジェクトです.そして、それが既にオブジェクトであるので、私は直接それをinsertOne メソッド.

    前進


    私の経験では、MongoDBは、物事がどのようにフォーマットされるかについて非常に特別でありえますinsertOne() , find(0) , findOneAndUpdate() .
    これは、読み取り、書き込み、削除、または更新しようとしているデータを確実に確認することが重要です.

    練習する


    私は、データを必要として、データがどのように見えるべきであるかについて来る必要があるプロジェクトについて心配する代わりにMongoDBのサンプルデータを使うことを勧めます.
    クラスタを作成すると、基本的にいくつかのサンプルコレクションをダウンロードできます.
    それを行うには、インデックスのような迅速なプロジェクト構造をスピンします.HTML、Boobone CSSとこの記事で見たサーバー側のコード.正確にデータを渡す方法で再生し、サーバー側(それは全く別の記事です)にクライアント側の要求を取得するだけでなく、const あなたのサーバーコードで、それをDBメソッドに渡して、それが更新するかどうか見てください.
    タスクの時間は、ほとんどのものよりも多くを助ける!