AIOT_Server 專案建立一個專業且標準的 Node.js 專案啟動流程。
這個流程將遵循您的技術棧(Node.js, Express, MySQL, Redis, MQTT)和部署要求(Docker Compose),確保程式碼的穩定性、可維護性及與各服務的連線正確性。
Node.js 專案 (gg1_node) 啟動流程設計
1. 專案初始化與結構
在開始撰寫程式碼之前,先建立一個標準化的專案結構:
初始化專案:
Bashmkdir gg1_node cd gg1_node npm init -y
安裝核心依賴套件:
Bash# 核心 Web 框架、資料庫、環境變數 npm install express mysql2 ioredis dotenv bcryptjs jsonwebtoken # 開發依賴 (Dev Dependencies) npm install -D nodemon # 開發時自動重啟
建議的檔案結構:
gg1_node/ ├── node_modules/ ├── .env # 環境變數設定 (開發用) ├── .gitignore ├── package.json ├── server.js # 專案主入口 (啟動流程核心) ├── config/ │ ├── db.js # 資料庫 (MySQL) 連線配置 │ ├── redis.js # Redis 連線配置 │ └── mqtt.js # MQTT Broker 連線配置 ├── controllers/ # 處理業務邏輯 (例如 userController.js) ├── models/ # 資料模型 (例如 userModel.js) ├── routes/ # 路由定義 (例如 authRoutes.js, apiRoutes.js) └── services/ # 外部服務 (例如 emailService.js, authService.js)
2. 核心啟動腳本 (server.js
)
server.js
應該專注於環境準備和服務連線的初始化工作,確保所有依賴服務都準備就緒後,才啟動 Web Server 監聽請求。
啟動流程步驟:
載入配置與環境變數:確保
.env
檔案中的變數(如 DB 連線字串、Port 號、JWT Secret)被正確載入。初始化資料庫連線 (MySQL):測試與 MySQL 資料庫的連線,如果連線失敗,則中斷啟動並報告錯誤。
初始化快取/Token 服務 (Redis):測試與 Redis 服務的連線,確保 Email 驗證 Token 可以被存取。
初始化 MQTT 連線 (Broker):連線到 Mosquitto Broker,並設定基本的訂閱 (Subscribe) 處理器。
啟動 Express 伺服器:開始監聽指定的 Port 號,並準備處理外部請求。
// server.js 範例程式碼
require('dotenv').config(); // 步驟 1: 載入環境變數
const express = require('express');
const app = express();
const { connectMySQL } = require('./config/db'); // 假設您在 config/db.js 中定義了連線函數
const { connectRedis } = require('./config/redis'); // 假設您在 config/redis.js 中定義了連線函數
const { connectMQTT } = require('./config/mqtt'); // 假設您在 config/mqtt.js 中定義了連線函數
const authRoutes = require('./routes/authRoutes');
const PORT = process.env.PORT || 3000;
// Middleware 設定
app.use(express.json()); // 處理 JSON 格式的請求體
// 路由設定
app.use('/api/auth', authRoutes); // 註冊、登入、驗證等路由
/**
* 專案啟動主函數
*/
async function startServer() {
try {
// 步驟 2: 初始化資料庫連線 (MySQL)
await connectMySQL();
console.log('✅ MySQL 資料庫連線成功');
// 步驟 3: 初始化快取服務 (Redis)
await connectRedis();
console.log('✅ Redis 連線成功');
// 步驟 4: 初始化 MQTT 連線
await connectMQTT();
console.log('✅ MQTT Broker 連線成功');
// 步驟 5: 啟動 Express 伺服器
app.listen(PORT, () => {
console.log(`🚀 AIOT Server 成功啟動,監聽 Port ${PORT}`);
console.log(` (服務名稱: gg1_node)`);
});
} catch (error) {
console.error('❌ 伺服器啟動失敗,關鍵服務無法連線或初始化:', error.message);
// 如果關鍵服務 (DB/Redis/MQTT) 失敗,通常應退出應用程式
process.exit(1);
}
}
startServer();
3. package.json 啟動指令
為了配合 PM2 和 Docker,設定好啟動指令:
// package.json 的 scripts 部分
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js",
"pm2": "pm2 start server.js --name gg1_node --watch"
},
透過這個流程,您可以確保您的 Node.js 後端服務(gg1_node
)在處理任何請求之前,所有的數據庫和 MQTT 服務都是就緒的,從而大大提高系統的穩定性。
接下來,您想先定義 config/db.js
中的 MySQL 連線邏輯,還是 services/emailService.js
中的 Email 驗證發送邏輯?
沒有留言:
張貼留言