Creating an MVC application using NODEjs and MariaDB
- 確定系統的主要功能和目標
- 定義使用者需求和系統需求
- 明確系統的輸入和輸出
:::info
- 必須使用帳號密碼登入
- 登入後可以新增/修改/刪除自己的拍賣品 (包含名稱、說明內容、與底價)
- 可以查看所有人的拍賣品清單(產品名稱、目前最高價),並可進一步查看拍賣品的內容與所有出價紀錄
- 可以對物品提出競標價格(新價格必須比現有最高價格與底價要高) :::
- 架構設計:決定整體系統架構,包括前端和後端
- 模組設計:將系統分解為幾個主要模組
- 數據設計:需要的資料結構和資料庫
Exploit_market
│
├── controllers
│ ├── login.route.js
│ ├── market.route.js
│ └── profile.route.js
│
├── models
│ ├── market.model.js
│ └── user.model.js
│
├── package.json
├── package-lock.json
│
├── public
│ ├── image.png
│ ├── javascripts
│ │ └── script.js
│ └── stylesheet
│ └── style.css
│
├── README.md
├── server.js
├── utils
│ ├── auth.js
│ └── db.js
│
└── views
├── index.ejs
├── login.ejs
├── partials
│ └── header.ejs
└── profile.ejs
Bids
CREATE TABLE `Bids` (
`bid_id` int(11) NOT NULL AUTO_INCREMENT,
`item_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`bid_amount` decimal(10,2) NOT NULL,
`bid_time` timestamp NOT NULL DEFAULT current_timestamp(),
PRIMARY KEY (`bid_id`),
KEY `item_id` (`item_id`),
KEY `user_id` (`user_id`),
CONSTRAINT `Bids_ibfk_1` FOREIGN KEY (`item_id`) REFERENCES `Products` (`item_id`) ON DELETE CASCADE,
CONSTRAINT `Bids_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `Users` (`user_id`) ON DELETE CASCADE
)
Products
CREATE TABLE `Products` (
`item_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`name` varchar(100) NOT NULL,
`description` text DEFAULT NULL,
`starting_price` decimal(10,2) NOT NULL,
`highest_bid` decimal(10,2) DEFAULT 0.00,
`created_at` timestamp NOT NULL DEFAULT current_timestamp(),
`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`due_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),
`status` enum('active','completed','canceled') DEFAULT 'active',
PRIMARY KEY (`item_id`),
KEY `user_id` (`user_id`),
CONSTRAINT `Products_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `Users` (`user_id`) ON DELETE CASCADE
)
Users
CREATE TABLE `Users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL,
`email` varchar(100) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT current_timestamp(),
`role` enum('user','admin') DEFAULT 'user',
PRIMARY KEY (`user_id`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `email` (`email`)
);
- 識別主要的類別:
- 定義類別之間的關係和互動
- 設計類別的屬性和方法
- 所有請求進入伺服器時都會經過 Route 所設定的規則。
- Route 會分析請求方法為何,並將程式分配到對應的Controller。
- express : 負責解析不同的請求方法以及路由設定。
- Controller 將頁面解析的結果經過判斷以及處理過傳送給Model。
- Model 接收到 Controller 的動作後執行查詢。
- mariadb : 與資料庫進行連接。
- DB 回傳對應資訊給 Model
- Model 將資訊回傳給 Controller,包含查詢成功或失敗。
- 將正確結果回傳給請求方,或者是錯誤失敗的狀態及訊息。
- 設計2D畫面的佈局
- 規劃使用者控制和互動方式
- 規劃系統文檔的結構和內容
- 設計使用者手冊和技術文檔
- 選擇適當的開發工具和環境
- 制定開發時間表和里程碑
Front-end 語言:HTML, CSS, Javascript
Back-end 語言:Javascript
Framework:Node.js
Template engine EJS
CSS layout module:css
Database:mariaDB
- 計劃如何分階段開發和改進系統
- 設定每個迭代的目標和可交付成果
http://151.80.37.64/ https://medium.com/codex/creating-an-mvc-application-using-nodejs-and-mariadb-9510c7b91716 https://hackmd.io/@monkenWu/Sk9Q5VoV4/https%3A%2F%2Fhackmd.io%2F%40gen6UjQISdy0QDN62cYPYQ%2FSyDGCsF44?type=book https://github.com/lrpt/myrep