iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
自我挑戰組

30 天 Node.js 探索:基礎、進階與實踐系列 第 24

Day 24: 資料庫連接與中介軟體設置

  • 分享至 

  • xImage
  •  

今天將專注於建立應用程式與 MongoDB 資料庫的連接,並設置必要的中介軟體(Middleware)來處理請求資料、驗證身份和管理錯誤處理。這些基礎設置對於確保應用程序的穩定性和功能性至關重要。

資料庫連接:MongoDB 與 Mongoose

接下來要使用 Mongoose 來管理 MongoDB 連接和操作資料庫中的資料模型。Mongoose 提供了一個簡單的 API,使得與 MongoDB 的互動更加直觀。

安裝 Mongoose 套件

在專案目錄中執行以下命令來安裝 Mongoose:

bash
npm install mongoose

設置資料庫連接

我們會在 config/ 資料夾中創建一個 db.js 檔案,專門用來管理 MongoDB 連接。
新建 config/db.js 檔案:

js
const mongoose = require('mongoose');
const config = require('config'); // 用於引入環境配置
const db = config.get('mongoURI'); // 從配置中取得 MongoDB 的 URI

const connectDB = async () => {
  try {
    await mongoose.connect(db, {
      useNewUrlParser: true,
      useUnifiedTopology: true,
      useCreateIndex: true,
      useFindAndModify: false,
    });
    console.log('MongoDB Connected...');
  } catch (err) {
    console.error(err.message);
    process.exit(1); // 若連接失敗,退出程式
  }
};

module.exports = connectDB;

更新 config/default.json 檔案

新增 MongoDB 的連接字串。確保在 config/default.json 中包含 MongoDB 的 URI:

json
{
  "mongoURI": "mongodb://localhost:27017/financeApp"
}

在伺服器啟動時連接資料庫

在 server.js 中引入並呼叫 connectDB 函數來連接資料庫:

js
const connectDB = require('./config/db');

// 連接 MongoDB 資料庫
connectDB();

這樣應用就與 MongoDB 建立了穩定的連接,並準備好進行後續的資料儲存操作。

設置 Express 中介軟體

中介軟體是 Express 應用中的核心部分,它負責處理請求和響應之間的邏輯操作。接著要設置一些常用的中介軟體來提升應用的功能性和安全性。

安裝必要的中介軟體

安裝一些常見的中介軟體模組:

bash
npm install express-validator config jsonwebtoken bcryptjs

解析請求主體 (Body Parsing)

在處理用戶的 API 請求時,我們通常需要解析 JSON 資料或 URL 編碼的資料。Express 提供了內建的 express.json() 中間件來處理這些資料。
在 server.js 中啟用:

js
app.use(express.json({ extended: false }));

處理 CORS (跨來源資源共享)

如果我們的前端應用程序和 API 位於不同的域(例如 React 前端與 Node.js API),則需要啟用 CORS 來允許跨域請求。
安裝 CORS:

bash
npm install cors

在 server.js 中啟用 CORS:

js
const cors = require('cors');
app.use(cors());

身份驗證中介軟體:JWT

使用 JWT 來進行用戶身份驗證。在用戶成功登入後,將會生成一個 JWT,該令牌會附帶在後續的請求標頭中,用於識別用戶身份。
創建 middleware/authMiddleware.js,並實現一個用於驗證 JWT 的中介軟體:

js
const jwt = require('jsonwebtoken');
const config = require('config');

module.exports = function (req, res, next) {
  // 從 header 中獲取 token
  const token = req.header('x-auth-token');

  // 如果沒有 token,拒絕請求
  if (!token) {
    return res.status(401).json({ msg: 'No token, authorization denied' });
  }

  // 驗證 token
  try {
    const decoded = jwt.verify(token, config.get('jwtSecret'));
    req.user = decoded.user;
    next();
  } catch (err) {
    res.status(401).json({ msg: 'Token is not valid' });
  }
};

錯誤處理中介軟體

在 Express 中,可以設置一個統一的錯誤處理中介軟體來捕捉所有異常,並返回適當的錯誤訊息。
新增一個錯誤處理中介軟體到 server.js:

js
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

這樣在出現異常的時候,應用將返回錯誤訊息,並在伺服器端打印出錯誤的詳細資訊,比較容易進行偵錯和修復。

總結

今天完成了應用與 MongoDB 的連接設置,並設置了多個 Express 中介軟體,包括解析請求資料、處理跨域請求、JWT 驗證和錯誤處理。這些設置不僅提升了應用的功能性和安全性,還為後續的用戶操作和資料管理奠定了基礎。在接下來的日子裡,這些基礎設置將有助於構建穩健的個人財務管理應用。


上一篇
Day 23: 設置財務記錄的資料模型與 CRUD
下一篇
Day 25: 類別與標籤管理功能
系列文
30 天 Node.js 探索:基礎、進階與實踐26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言