好用的架構。
什麼是 MVC?
先來看張圖:
Model
:就是跟資料庫有關的部分,專職處理「資料」相關的操作
View
:就是跟畫面有關的部分,根據丟進去的「資料」產生「畫面」
Controller
:負責指揮 Model 對資料庫做什麼事,或是給 View 對應的資料來顯示,最後再把 response 回傳
範例
拿 Express 來舉例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| const express = require('express'); const todoController = require('./controllers/todoController'); const app = express(); const port = 5000;
app.set('view engine', 'ejs');
app.get('/todos', todoController.getAll)
app.get('/todos/:id', todoController.get)
app.listen(port, () => { console.log(`Example app listening on port ${port}`); })
|
Model 只負責提供資料:
1 2 3 4 5 6 7 8 9 10 11 12
| const todos = ['first todo', 'second todo', 'third todo']; const todoModel = { getAll: () => { return todos; }, get: id => { return todos[id]; } } module.exports = todoModel
|
Controller 負責協調 Model 和 View:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| const todoModel = require('../models/todoModel'); const todoController = { getAll: (req, res) => { res.render('todos', { todos: todoModel.getAll() }) }, get: (req, res) => { const id = req.params.id; res.render('todo', { todo: todoModel.get(id) }) } } module.exports = todoController
|
View 只負責根據資料顯示畫面:
1 2 3 4 5 6 7 8
| // todos.ejs <h1>Todos</h1>
<ul> <% for (const todo of todos) { %> <li><%= todo %></li> <% } %> </ul>
|
1 2 3
| <h1>Todos</h1> <h2><%= todo %></h2>
|