ノード.JS , MongoDB , Express REST API (その1 )


私は私のコーディングの旅でMernアプリケーションを構築する時間を決めた.あなたが求めるMernアプリは何ですか?それを壊しましょう
  • MongoDB :データベースのNOSQLスタイル.これは、バックエンドのデータが格納されているので、ドキュメントやコレクションのスタイルで行われます.
  • Express :ノード用に構築されたバックエンドフレームワーク.これは、ノードを使用してAPIを作成する事実上の方法です.
  • 反応:フェイスブックによって開発されたフレームワークと呼ばれるフロントエンドのJavaScriptライブラリ.通常、単一のページアプリケーションとUIを構築するために使用します.
  • ノード:バックエンドのJavaScriptランタイム環境では、JavaScriptの使用を許可するWebブラウザの外では、もともと設計された.
  • それはメロンを作ります.今、私はいくつかの反応チュートリアルをしました、しかし、それはスタックのフロントエンド部分です.今日、私はバックエンドをセットアップを使用して残りの部分を使用して行きたい.これはノードを残します.JPは、JavaScriptを使用して開発するには、ノードのフレームワークとしては、APIを設定し、ストレージのデータベースとしてMongoDBを表現します.レッツゴー.

    セットアップ
    私は、あなたが既にノードとNPMがインストールされていると仮定して、MongoDBとPostmanがあなたの要求をテストするためにインストールされたアカウントと同様にアカウントを持っていると仮定します.あなたがこの点でそうしなかったならば、何があなたを止めていますか.

    プロジェクトの初期化
    まず最初に、プロジェクトのルートで最初に我々のアプリケーションを初期化し、パッケージを作成します.パッケージ管理のためのJSON
    npm init -y
    
    Yフラグはすべてのデフォルトオプションにyesを確認することです.また、手動でこれを行うことができますし、フラグをオフにします.

    パッケージをインストール
    プロジェクトのルートでは、これをビルドするためにいくつかのパッケージをインストールします.
    npm install express mongoose dotenv
    
    これらについて詳しく説明します.
  • Express :ノードフレームワークはこの時点まで複数回記載されています.
  • 24579172マングース:オブジェクトデータモデリング(ODM)ライブラリMongoDBとノードのデータ間の関係を管理し、スキーマを作成するために使用.
  • Dotenv :このパッケージは使用を可能にします.データを格納するためのenvファイルは、資格情報やキーなどのアクセスできません.

  • データベースを作成する
    MongoDBは先に行くと新しいプロジェクトを作成し、それを呼び出す必要があります.
    プロジェクトが作成されると、プロジェクトにクラスタが作成されます.私は個人的にすべてのデフォルトと無料のオプションを行った.
    3 .セキュリティの下にある必要がありますし、新しいデータベースユーザーを選択し、ユーザー名とパスワードを作成するデータベースアクセスに移動します.
    4 .ストレージの下にクラスタに戻って、無料クラスタでは、接続をクリックして作成します.あなたのIPアドレスをホワイトニングのプロンプトを通過し、アプリケーションを接続してください.このようにコピーすることができる文字列を指定します.
    mongodb+srv://EidorianAvi:<password>@cluster0.i3fzx.mongodb.net/<dbname>?retryWrites=true&w=majority
    
    先に行くとパスワードを入力し、DBは、この時点で必要な名前.
    あなたのエクスプレスプロジェクトのルートディレクトリに戻る.envファイル.このファイルでは、この文字列を指定します.
    DB_CONNECTION="mongodb+srv://EidorianAvi:<password>@cluster0.i3fzx.mongodb.net/<dbname>?retryWrites=true&w=majority"
    
    6.祝う.あなたのMongoDBデータベースを作成し、あなたのプロジェクトに接続文字列をもたらした.ENVファイルので、それを使用することができますが、それは一般的に利用できません.

    アプリケーションの構築を開始
    さて、プロジェクトのこの時点で我々はパッケージを初期化しました.JSONファイルは、適切なパッケージをインストールし、ストレージ用のデータベースを作成し、接続文字列をもたらしました.envファイル.今、APIを構築し始めることができます.我々のアプリを作成しましょう.js
    touch app.js
    
    今我々のアプリの中.JSはファイルに表現して、次のように初期化します.
    const express = require('express');
    const app = express();
    
    また、ファイルにマングースを持ってきて、我々を必要としましょう.ENVファイル
    const mongoose = require('mongoose');
    require('dotenv/config');
    
    恐ろしい.今では、そのすべての真下に行われているので、JSONフォーマットに何らかのリクエストを有効にするために、いくつかの組み込みミドルウェアを使用するつもりです.
    app.use(express.json());
    app.use(express.urlencoded({ extended: true }));
    
    今、我々は我々が我々のアプリを要求のために聞くだけでなく、ルートへの要求のために我々のルートをセットアップして、我々が以前にインストールしたそのMoogooseパッケージを使っているデータベースに接続するポートをセットアップすることができます.
    // Root Route
    app.get('/', (req, res) => {
        res.send('This is the root URL');
    });
    
    //Connect to DB
    mongoose.connect( process.env.DB_CONNECTION, { useNewUrlParser: true,useUnifiedTopology: true }, () => {
        console.log("Connected to database");
    });
    
    // Listen on port 4000 for requests
    app.listen(4000);
    
  • 最初にルートの名前を取得するGETリクエストと、レスポンスとリクエストを受け取り、どうするかを決める関数のルートルートを設定します.
  • 私はそれからmongooseを使用してデータベース接続をセットアップしました.接続.それは3つのことを始めました、最初に我々が我々に格納したDBRound接続.envファイルは、プロセスとしてアクセスすることができます.環境変数dbCount接続.番目のカップルオプションはあまりにも多くの今のそれらの心配しないでください.最後に、接続が完了したらコールバック関数.データベースに接続しているコンソールにログオンします.
  • 最後に私はアプリケーションを我々のlocalhostのポート4000に耳を傾けた.
  • テストしてください.ノードアプリケーションを実行します.JSとあなたのlocalhostのポート4000では、データベースに接続しているコンソールで見るだけでなく、ルートで送信した応答を見る必要があります.

    モデルの設定
    今ので、我々は我々のアプリケーションへのリクエストだけでなく、データベースに接続しようとすることができることを先に行くとモデルを設定しましょう.モデルフォルダを作成し、その中にモデルファイルを作りました.
    mkdir models
    touch models/Dog.js
    
    今、私たちはmongooseを使用してモデルのスキーマを作成することができます.
    const mongoose = require('mongoose');
    
    const DogSchema = mongoose.Schema({
        name: {
            type: String,
            required: true
        },
        breed: String
    });
    
    module.exports = mongoose.model('Dogs', DogSchema);
    
  • 私はマングースを持ってきた.
  • マングースを使ってdogSchemaを作成しました.スキーマと目的のスキーマを持つオブジェクトを渡します.
  • 私はそれが必要であることを示すために名前の検証を入れました.
  • 私はマングースを使った犬モデルとしてエクスポートしました.モデル

  • ルートの設定
    今、私たちには、モデルを持っているので、犬モデルのためにいくつかのルートを構築できます.アプリケーションのルートで:
    mkdir routes
    touch routes/dogs.js
    
    我々の犬の中で、ルートはExpressルータを持ってきて、それを初期化して、我々がちょうどつくられる犬モデルと同様にそれを輸出します
    const express = require('express');
    const router = express.Router();
    const Dog = require('../models/Dog');
    
    module.exports = router;
    
    今すぐ戻って我々のアプリで.JSは、いくつかのミドルウェアを使用して、' dog 'に移動するすべてのリクエストをリダイレクトします.
    const dogsRoute = require('./routes/dogs');
    
    app.use('/dogs', dogsRoute);
    
    いいね.

    GETリクエストとPOSTリクエスト
    さて、これは今日の最後の部分です.
    それが正しく働いていることを確認するために、我々のルート/犬ルートへの反応を準備しましょう.
    router.get('/', (req, res) => {
        res.send('Dogs page');
    });
    
    あなたがlocalhostに行った場合:4000/犬我々のアプリは、プレーンテキスト“犬ページ”を送信します.それはあなたが正常に/犬のルートへのパスを設定するcongratsのために働いている場合.
    それで、私たちが以前に設定したMongoDBデータベースに何かをうまくポストできるかどうか見ましょう.
    router.post('/add-dog', (req, res) => {
        const dog = new Dog({
            name: req.body.name,
            breed: req.body.breed,
        });
    
        dog.save()
            .then(result => {
                res.json(result);
            })
            .catch(e => {
                res.json(e);
            });
    });
    
  • 私は、/犬/追加ドッグパスで我々のルータにポストリクエストをしました.
  • 私は、要求を受けとって、それを定数に割り当てたドッグモデルの新しいインスタンスを作成しました.
  • 私はデータベースに保存し、成功すればJSON形式でデータベースのエントリを送り返しました.
  • が失敗した場合、JSON形式でエラーに対応するキャッチがあります.
  • この時点でオープン郵便配達人.あなたがlocalhostにGET要求をすることができるならば:4000/犬とそれは良いサインである「犬ページ」を返します.
    あなたがlocalhostにポスト要求をすることができるならば:4000/犬/Add犬とサーバーは、あなたが良い形でいる新しくつくられたエントリで応えます.MongoDBであなたのコレクションをチェックアウトし、新しい犬のドキュメントを新しく投稿犬コレクションを参照してくださいする必要があります.

    包む
    これで、バックエンドアプリケーションMongoDB、Express、およびノードを使用して構築している.作成した特定のルートに対して正常にリクエストを行うことができ、実際のデータベースにデータを格納するPOSTリクエストも正常に作成できます.良いもの権利?私は、より多くの肉付けされたAPIを構築することに関してもう少しカバーするためにもう少しであるということを知っています、しかし、それは来週の間です.データベースから実際のデータを取得したり、データを入れたり更新したり、データベースから削除する方法を説明します.
    あなたが質問をするならば、私に手を差し伸べる自由な感じがします、しかし、さもなければ、あなたは基本的なノードAPIをセットアップするより自信があると思います.これをチェックアウトのおかげで、常にハッピーコーディング!