在前面的文章中,我們已經學會了如何使用 MongoDB 來儲存和讀取數據,並學習了如何使用 Express.js 來構建 API。今天,我們將進一步整合這兩個工具,實現數據的持久化操作,讓伺服器不僅能處理用戶的請求,還能與數據庫進行無縫溝通。
數據持久化是指將數據存儲在持久存儲設備(如硬碟、雲端等)中,確保數據在系統重啟或崩潰後不會丟失。對於一個網站或應用來說,數據持久化非常重要,因為它能保障數據的長期保存和有效管理。
MongoDB 是一個 NoSQL 資料庫,擅長儲存大規模的文檔數據,非常適合網站和現代應用的需求。而 Express.js 則是 Node.js 最常用的伺服器框架之一,可以輕鬆與 MongoDB 整合,完成數據存儲、查詢和更新的功能。
我們將結合 MongoDB 和 Express.js,創建一個完整的 API,並實現以下功能:
首先,在你的專案中,確保已安裝 Mongoose 和 Express.js。打開命令行並運行以下指令:
npm install express mongoose
這會將 Mongoose 與 Express.js 安裝到你的專案中,並準備進行數據庫操作。
在 app.js
中,我們將添加 MongoDB 的連接代碼。確保你的 MongoDB 伺服器在本地或雲端執行中,然後在你的專案中添加以下代碼來連接到 MongoDB:
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/mydatabase', {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(() => console.log('Connected to MongoDB'))
.catch(err => console.error('Could not connect to MongoDB', err));
這段代碼將 MongoDB 伺服器與 Node.js 進行連接,並確保連接成功後進行後續操作。
為了在 MongoDB 中儲存數據,我們需要定義數據的結構。這可以使用 Mongoose 來定義 Schema
,然後創建一個模型來管理數據。
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
age: Number
});
const User = mongoose.model('User', userSchema);
這裡定義了一個簡單的用戶結構,包含 name
、email
和 age
三個欄位,並且確保 email
是唯一的,防止重複數據。
接下來,我們將實現 Express.js 的 API 來處理用戶的數據儲存、查詢、更新和刪除。
新增數據到 MongoDB
app.post('/users', async (req, res) => {
try {
const newUser = new User({
name: req.body.name,
email: req.body.email,
age: req.body.age
});
const savedUser = await newUser.save();
res.status(201).json(savedUser);
} catch (error) {
res.status(400).send('Error saving user: ' + error.message);
}
});
這段代碼會接收用戶的 POST 請求,然後將數據儲存在 MongoDB 中。如果成功,伺服器會返回新增的用戶數據;如果失敗,則會返回錯誤訊息。
讀取所有用戶數據
app.get('/users', async (req, res) => {
try {
const users = await User.find();
res.json(users);
} catch (error) {
res.status(500).send('Error retrieving users: ' + error.message);
}
});
這段代碼會查詢 MongoDB 中的所有用戶數據,並以 JSON 格式返回給客戶端。
更新用戶數據
app.put('/users/:id', async (req, res) => {
try {
const updatedUser = await User.findByIdAndUpdate(req.params.id, req.body, { new: true });
res.json(updatedUser);
} catch (error) {
res.status(400).send('Error updating user: ' + error.message);
}
});
這段代碼允許用戶根據 ID 更新數據,並返回更新後的用戶資料。
刪除用戶數據
app.delete('/users/:id', async (req, res) => {
try {
await User.findByIdAndDelete(req.params.id);
res.send('User deleted');
} catch (error) {
res.status(400).send('Error deleting user: ' + error.message);
}
});
這段代碼允許根據用戶的 ID 刪除指定的用戶數據。
現在,我們可以啟動伺服器並使用 Postman 或 curl 等工具來測試這些 API。這些 API 功能涵蓋了用戶數據的創建、查詢、更新和刪除,是一個完整的 CRUD 操作範例。
node app.js
今天的文章中,我們學習了如何將 MongoDB 與 Express.js 整合,實現數據的持久化操作。這使得我們的網站能夠穩定儲存用戶數據,並提供完善的數據管理功能。透過這樣的設置,你的應用程式將能夠應對更加複雜的數據操作需求,並確保數據的安全與穩定。