在當今快速發展的科技領域,MERN Stack(MongoDB、Express.js、React、Node.js)已成為全端開發的熱門技術棧,因其基於JavaScript的統一性與高效生態系統而受到青睞。
結合DevOps工具與流程,MERN Stack不僅能加速開發,還能提升部署與維護效率。
這篇「MERN Stack 開發實戰」將帶您從基礎搭建到進階應用,探索如何使用現代工具(如Docker、GitHub Actions)打造一個完整的Web應用,助您掌握全端開發與DevOps的實戰技能。
第一步:認識 MERN Stack 與 DevOps
1. MERN Stack 簡介
MERN Stack 是全端開發的技術組合:
- MongoDB:NoSQL資料庫,以JSON格式存儲靈活數據。
- Express.js:基於Node.js的輕量後端框架,簡化API開發。
- React:前端庫,構建動態用戶界面。
- Node.js:伺服器端JavaScript運行環境,實現前後端統一。
這四者協作,讓開發者能用單一語言完成全端任務。
2. DevOps 在全端開發中的角色
DevOps(Development + Operations)強調開發與運維的整合,目標是:
- 自動化流程:從代碼提交到部署。
- 提升效率:減少手動操作與錯誤。
- 持續交付:快速發布新功能。
在MERN Stack中,DevOps工具如Docker(容器化)與GitHub Actions(CI/CD)至關重要。
第二步:環境搭建與基礎開發
1. 環境準備
- 安裝Node.js與npm:作為MERN的核心運行環境。
- MongoDB:本地安裝或使用MongoDB Atlas(雲端服務)。
- VS Code:推薦編輯器,安裝插件如ESLint與Prettier。

2. 後端基礎:Node.js 與 Express.js
創建一個簡單後端:
- 初始化項目:
npm init -y
,安裝依賴npm install express mongoose dotenv
。 - 基本伺服器:
const express = require('express'); const app = express(); app.get('/', (req, res) => res.send('Hello MERN!')); app.listen(3000, () => console.log('Server running on port 3000'));
- 連接MongoDB:使用
mongoose
建立數據模型,例如用戶表。
實踐:設計一個/api/users
路由,返回用戶數據。
3. 前端基礎:React
搭建React前端:
- 使用Create React App:
npx create-react-app client
。 - 簡單組件:
import React, { useEffect, useState } from 'react'; function App() { const [data, setData] = useState(''); useEffect(() => { fetch('http://localhost:3000/').then(res => res.text()).then(setData); }, []); return <h1>{data}</h1>; }
- 啟動:
npm start
,顯示後端返回的「Hello MERN!」。
第三步:實戰項目 – 待辦事項應用
1. 項目架構
- 後端:提供API管理任務。
- 前端:展示任務列表與輸入框。
- 資料庫:存儲任務數據。
2. 後端實現
- 數據模型(
models/Task.js
):const mongoose = require('mongoose'); const taskSchema = new mongoose.Schema({ title: String, completed: Boolean }); module.exports = mongoose.model('Task', taskSchema);
- API路由(
routes/tasks.js
):const express = require('express'); const router = express.Router(); const Task = require('../models/Task'); router.get('/', async (req, res) => res.json(await Task.find())); router.post('/', async (req, res) => { const task = new Task(req.body); await task.save(); res.json(task); }); module.exports = router;
- 主文件(
server.js
)整合路由與MongoDB連接。
3. 前端實現
- 任務列表組件:
import React, { useEffect, useState } from 'react'; function TaskList() { const [tasks, setTasks] = useState([]); useEffect(() => { fetch('/api/tasks').then(res => res.json()).then(setTasks); }, []); return ( <ul> {tasks.map(task => <li key={task._id}>{task.title}</li>)} </ul> ); }
- 添加任務表單:使用
fetch
發送POST請求。
實踐:啟動前後端,測試任務的顯示與添加功能。
第四步:DevOps 工具整合
1. 版本控制與協作
- Git:初始化倉庫,提交代碼:
git init
、git commit
。 - GitHub:推送項目,設置分支保護規則。
- 實踐:將待辦事項應用上傳至GitHub。
2. 容器化 – Docker
- Dockerfile(後端):
FROM node:16 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD ["node", "server.js"]
- docker-compose.yml:整合MongoDB與應用:
version: '3' services: app: build: . ports: - "3000:3000" depends_on: - mongo mongo: image: mongo ports: - "27017:27017"
- 運行:
docker-compose up
,測試本地容器化環境。
3. CI/CD – GitHub Actions
- 工作流文件(
.github/workflows/deploy.yml
):name: Deploy on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: { node-version: '16' } - run: npm install - run: npm test
- 實踐:推送代碼後,檢查自動構建是否成功。
第五步:進階優化與部署
1. 性能優化
- 前端:使用
React.memo
避免不必要渲染。 - 後端:添加Redis緩存熱門任務。
- 資料庫:為MongoDB的
title
字段創建索引。
2. 安全性
- 環境變量:使用
.env
存儲MongoDB連接字符串。 - 驗證:整合JWT實現用戶登錄。
- CORS:限制前端域名訪問後端。
3. 部署
- Vercel:部署React前端。
- Render:部署Node.js後端與MongoDB。
- 實踐:上線應用,確保前後端正常通信。
第六步:資源與職涯建議
1. 學習資源
- MERN教程:MERN Stack Course(Udemy)、Net Ninja YouTube系列。
- DevOps入門:Docker官方文檔、GitHub Actions指南。
- 書籍:《Full Stack JavaScript》、《The DevOps Handbook》。
2. 實戰建議
- 擴展項目:添加任務編輯與刪除功能。
- 測試:使用Jest測試API,Cypress測試前端。
- 作品集:部署應用並記錄過程,展示技術能力。
3. 職涯發展
- 簡歷:強調MERN與DevOps經驗。
- 面試:準備React狀態管理與Docker基礎問題。
- 社群:參與MERN相關開源項目,提升曝光。
總結:MERN Stack 與 DevOps 的實戰之旅
MERN Stack 結合DevOps工具,提供了一條現代全端開發的高效路徑。
從基礎的前後端搭建,到Docker容器化與GitHub Actions自動化部署,您將掌握構建與維護Web應用的全流程。
立即開始,動手實踐這個待辦事項應用,並逐步融入進階技術,成為一名具備競爭力的全端工程師吧!
圖片來源︰pexels