底層設計:輪詢系統 - 使用 Nodejs

WBOY
發布: 2024-08-31 13:03:07
原創
194 人瀏覽過

Low-Level Design: Polling System - Using Nodejs

目錄

  1. 資料庫設定
    • MySQL 資料庫架構
    • 投票系統的 ERD
  2. 後端設定
    • 第 1 步:初始化項目
    • 第 2 步:專案結構
  3. API實作
    • 第 1 步:資料庫連線 (db/db.js)
    • 第 2 步:環境變數 (.env)
    • 第 3 步:輪詢控制器 (controllers/pollController.js)
    • 第 4 步:投票路由 (routes/pollRoutes.js)
    • 第 5 步:伺服器入口點 (index.js)
  4. 錯誤處理
  5. 測試
  6. 結論

請參考文章輪詢系統基礎底層設計-I

讓我們將整個過程分解為詳細的步驟,包括資料庫設定、使用 Node.js 和 Express 實作 API 以及與 MySQL 的交互。我們將涵蓋:

資料庫設定

首先,我們將定義 MySQL 資料庫的架構並建立必要的表。

MySQL 資料庫架構

雷雷
  • 投票表:儲存帶有唯一識別碼、問題和建立時間戳記的投票資訊。

  • 選項表:儲存與投票相關的選項,透過 poll_id 連結。

  • 投票表:記錄每次投票,連結到民意調查、選項和使用者。

    投票系統的 ERD

實體

  1. Polls:代表投票本身,具有 poll_id 和 Question 等屬性。
  2. Options:代表每次投票可用的選項,具有 option_id 和 option_text 等屬性。
  3. Votes:表示使用者的投票數,具有vote_id、user_id、timestamps等屬性。

關係

  1. 投票和選項之間的一對多:每個投票可以有多個選項。
  2. 投票和選項之間的多對一:每一票都與一個選項相關聯。
  3. 投票與民調之間的多對一:每張投票都與特定的民調相關聯。

這是 ERD 的描述:

  1. 投票表

    • poll_id(主鍵)
    • 問題
    • 創建於
  2. 選項表:

    • option_id(主鍵)
    • poll_id(外鍵引用 polls.poll_id)
    • 選項文字
  3. 投票表

    • vote_id(主鍵)
    • poll_id(外鍵引用 polls.poll_id)
    • option_id(外鍵引用 options.option_id)
    • user_id
    • 創建於

關係將以實體之間的線表示:

  • 民意調查選項:一項民意調查可以有多個選項。
  • 選項投票:一個選項可以有多個投票。
  • 民調投票:一項民調可以有很多票。

後端設定

讓我們使用 Express 和 MySQL 設定一個 Node.js 專案。

第 1 步:初始化項目

雷雷
  • express:Node.js 的 Web 框架。
  • mysql2:Node.js 的 MySQL 用戶端。
  • dotenv:用於管理環境變數。

第 2 步:專案結構

為專案建立基本結構:

雷雷

API實作

步驟1:資料庫連接

檔案 - db/db.js

雷雷

第2步:環境變數

文件 - .env

雷雷

第 3 步:投票控制器

檔案-controllers/pollController.js

該檔案將實現輪詢系統所有必需的 CRUD 操作。

雷雷

第 4 步:投票路線

檔案-routes/pollRoutes.js
定義每個 API 端點的路由:

雷雷

第 5 步:伺服器入口點

檔案 - index.js
最後,設定伺服器:

雷雷

錯誤處理

每種方法都包含對常見問題的錯誤處理,例如無效輸入、重複投票、缺少投票或選項以及伺服器錯誤。

  • 輸入驗證:執行檢查以確保輸入有效,例如檢查必填欄位是否存在且格式正確。
  • 事務管理:對於涉及多個查詢的操作(例如建立或更新投票),事務用於確保一致性。

測試

使用Postman或curl等工具測試每個端點。

  • 建立投票:使用包含問題和選項陣列的 JSON 正文來 POST /api/polls。
  • 更新投票:PUT /api/polls/:pollId 更新問題和選項。
  • 刪除投票: DELETE /api/polls/:pollId.
  • 投票投票:使用 userId 和選項 POST /api/polls/:pollId/vote。
  • 查看投票結果:GET /api/polls/:pollId/results。

結論

這是一個使用 Node.js、Express 和 MySQL 的線上投票系統的全面模組化實作。它處理基本的CRUD操作並確保資料與交易的一致性。它還包括基本的錯誤處理,使 API 更加健壯和用戶友好。

請參考文章輪詢系統基礎底層設計-I

更多詳情:

取得所有與系統設計相關的文章
標籤:SystemDesignWithZeeshanAli

系統設計與zeeshanali

Git:https://github.com/ZeeshanAli-0704/SystemDesignWithZeeshanAli

以上是底層設計:輪詢系統 - 使用 Nodejs的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!