Model-View-Controller (MVC) パターンは、Web 開発で最も人気のあるアーキテクチャ パターンの 1 つです。 MVC は、アプリケーションを 3 つの相互接続されたコンポーネント (モデル、ビュー、コントローラー) に分割することで、組織化され、保守可能でスケーラブルなコードを促進します。 Node.js は、非同期処理と広大なエコシステムを備えており、MVC ベースのアプリケーション、特に Web および API 開発を構築する場合に最適です。このガイドでは、Node.js を使用した MVC パターンを検討し、その利点と実際の実装について説明します。
MVC パターンは、アプリケーションを 3 つの異なる部分に分割します。
このように関心を分離すると、管理、テスト、拡張が簡単な方法でコードを整理できます。
ここでは、Node.js と Express を使用して単純な MVC アプリケーションを構築します。この例は、ユーザーがタスクを表示、追加、削除できるようにする基本的な「タスク マネージャー」です。
まず、新しい Node.js プロジェクトを作成し、必要な依存関係をインストールします。
# Create a project folder mkdir mvc-task-manager cd mvc-task-manager # Initialize Node.js npm init -y # Install Express and other dependencies npm install express ejs mongoose body-parser
アプリケーションをモデル、ビュー、コントローラーのフォルダーに整理します。この構造は MVC パターンに不可欠です。
mvc-task-manager/ │ ├── models/ │ └── Task.js │ ├── views/ │ ├── index.ejs │ └── tasks.ejs │ ├── controllers/ │ └── taskController.js │ ├── public/ │ └── css/ │ └── styles.css │ ├── app.js └── package.json
モデル は、アプリケーション内のデータ構造を表します。このタスク マネージャーでは、Mongoose を使用して MongoDB でタスク モデルを定義します。
// models/Task.js const mongoose = require('mongoose'); const taskSchema = new mongoose.Schema({ title: { type: String, required: true }, description: { type: String }, completed: { type: Boolean, default: false } }); module.exports = mongoose.model('Task', taskSchema);
ここで、taskSchema は、タイトル、説明、および完了のフィールドを含むタスク モデルを定義します。
コントローラは、アプリケーション ロジックを処理し、ユーザー入力を処理し、モデルと対話し、データをレンダリングするようにビューに指示します。
// controllers/taskController.js const Task = require('../models/Task'); exports.getTasks = async (req, res) => { const tasks = await Task.find(); res.render('tasks', { tasks }); }; exports.createTask = async (req, res) => { const { title, description } = req.body; await Task.create({ title, description }); res.redirect('/tasks'); }; exports.deleteTask = async (req, res) => { await Task.findByIdAndDelete(req.params.id); res.redirect('/tasks'); };
このコントローラーは 3 つの主要なアクションを定義します:
この例では、EJS を使用して HTML ビューをレンダリングします。これにより、タスク データをブラウザーに動的に表示できるようになります。
ホームページ用のindex.ejsファイルとタスクを表示するためのtasks.ejsファイルを作成します。
<!-- views/index.ejs --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Task Manager</title> <link rel="stylesheet" href="/css/styles.css"> </head> <body> <h1>Welcome to Task Manager</h1> <a href="/tasks">View Tasks</a> </body> </html>
tasks.ejs ファイルはタスクのリストを表示し、タスクを追加または削除するためのフォームを提供します。
<!-- views/tasks.ejs --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Task List</title> </head> <body> <h1>Tasks</h1> <ul> <% tasks.forEach(task => { %> <li><%= task.title %> - <a href="/delete/<%= task._id %>">Delete</a></li> <% }) %> </ul> <form action="/add" method="POST"> <input type="text" name="title" placeholder="Task Title" required> <input type="text" name="description" placeholder="Description"> <button type="submit">Add Task</button> </form> </body> </html>
メインの app.js ファイルでルートを定義し、各 URL エンドポイントを関連するコントローラー関数に接続します。
// app.js const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const taskController = require('./controllers/taskController'); const app = express(); app.set('view engine', 'ejs'); mongoose.connect('mongodb://localhost:27017/taskDB', { useNewUrlParser: true, useUnifiedTopology: true }); app.use(bodyParser.urlencoded({ extended: true })); app.use(express.static('public')); // Routes app.get('/', (req, res) => res.render('index')); app.get('/tasks', taskController.getTasks); app.post('/add', taskController.createTask); app.get('/delete/:id', taskController.deleteTask); const PORT = 3000; app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
少しスタイルを追加するには、public/css/ フォルダーにstyles.css ファイルを作成します。基本的なスタイルを追加して、アプリケーションを視覚的に魅力的なものにすることができます。
以下を使用してアプリケーションを起動します:
node app.js
ブラウザで http://localhost:3000 にアクセスします。 MVC アーキテクチャを使用して、ビュー間の移動、新しいタスクの追加、タスクの削除を行うことができます。
以上がNode.js を使用した MVC パターンを理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。