MERN スタックで構築された e コマース アプリケーションのコンテキストで、ユーザーが商品の詳細を取得しようとしたときに要求と応答のサイクルがどのように機能するかを見てみましょう。
ユーザーは電子商取引サイトを開いて商品の詳細を表示したいと考えています。商品リストをクリックしたり、特定の商品を検索したりする可能性があります。
フロントエンド UI を担当する React がこのインタラクションを検出し、商品データを取得するリクエストをトリガーします。
React は、/api/products/:id のようなエンドポイントをターゲットとして、バックエンドに対して HTTP リクエスト (axios、fetch などを使用) を作成します。ここで、:id は製品の一意の識別子です。
Node.js と Express で構築されたバックエンド サーバーは、定義されたルートで受信 HTTP リクエストをリッスンします。
/api/products/:id へのリクエストが到着すると、Express はルートを認識し、リクエストを対応するルート ハンドラーに転送します。
リクエストが処理される前に、ミドルウェア機能が通過する可能性があります。
たとえば、ミドルウェアはリクエストの詳細をログに記録したり、ユーザーが認証されているかどうかを確認したり、リクエスト パラメータを検証したりする場合があります。
すべてが正常であれば、リクエストはルート ハンドラーに進みます。そうしないと、ミドルウェアがエラー応答 (例: 「不正アクセス」) を返す可能性があります。
リクエストが適切なルート ハンドラーに到達すると、Express は Mongoose などの MongoDB ドライバーを使用してデータベースにクエリを実行します。
クエリは次のようになります: Product.findById(productId)。productId は URL から抽出されます。
MongoDB は、名前、価格、説明、画像、在庫状況などの製品の詳細をデータベースから取得します。
MongoDB から製品の詳細を取得した後、Express はデータを処理します。
データは JSON オブジェクトにフォーマットされ、製品に関する必要な情報がすべて含まれます。
Express は、この JSON 応答を React フロントエンドに送り返します。
React は応答で商品の詳細を受け取ります。
データを使用してユーザー インターフェイスを更新し、製品の名前、価格、画像、説明、その他の関連情報を表示します。
製品が見つからない場合、またはエラーが発生した場合 (「製品が利用できません」など)、React はユーザーに適切なメッセージを表示します。
リクエストとレスポンスのフローの例
ユーザー アクション (反応): ユーザーは、ホームページ上の「ワイヤレス ヘッドフォン」という名前の製品をクリックします。
HTTP リクエスト: React は GET リクエストを /api/products/12345 に送信します。12345 は「ワイヤレス ヘッドフォン」の製品 ID です。
Express ルート処理: Express はリクエストを受信し、/api/products/:id のルートがあるかどうかを確認します。次に、リクエストを関連するハンドラーに渡します。
データベース クエリ (MongoDB): Express は Mongoose を使用して MongoDB にクエリを実行し、Product.findById("12345") を実行して「ワイヤレス ヘッドフォン」の詳細を取得します。
応答の形式: 製品が見つかった場合、Express は次のような詳細を含む JSON 応答を送信します:
{
"id": "12345",
"name": "ワイヤレスヘッドフォン",
「価格」: 59.99、
"description": "ノイズキャンセリング機能を備えた高品質ワイヤレスヘッドフォン。",
"画像": ["画像1.jpg", "画像2.jpg"],
「在庫」: 20
}
このフローで示される主要な概念
非同期リクエスト: React はリクエストを非同期に処理し、ユーザーが応答を待っている間にアプリを操作できるようにします。
一貫したデータ フロー: すべてのコンポーネント (React、Express、MongoDB) は JSON 経由で通信し、スタック全体でのスムーズなデータ フローを保証します。
スケーラビリティ: 各コンポーネントは個別にスケーリングできるため、増大するトラフィックや多数の製品の処理が容易になります。
このリクエストとレスポンスのサイクルは、MERN スタック上に構築された e コマース サイトが製品情報を取得し、ユーザーにシームレスなエクスペリエンスを提供する方法を効果的に示しています。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3