iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
自我挑戰組

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

Day 13: 資料庫操作與 CRUD

  • 分享至 

  • xImage
  •  

接下來要學習如何使用 MongoDB 和 Mongoose 實現資料的增、查、改、刪(CRUD)操作,並了解 CRUD 的重要性。

什麼是 CRUD?

  • Create(新增): 將新資料插入到資料庫中。
  • Read(查詢): 從資料庫中獲取已存在的資料。
  • Update(更新): 修改資料庫中已存在的資料。
  • Delete(刪除): 移除資料庫中的資料。
    每個應用程式都離不開這四個操作,無論是用於管理用戶、處理訂單,還是儲存產品的資訊。

使用 Mongoose 實現 CRUD 操作

我們將使用昨天建立的 User 資料模型,並基於此模型來進行 CRUD 操作。

建立(Create)

使用 save() 方法將新資料儲存到資料庫中。

js
async function createUser() {
  const user = new User({
    name: 'Jimmy Chen',
    email: 'jimmy@example.com',
    age: 20
  });
  const result = await user.save();
  console.log(result);
}

createUser();

這段程式碼創建了一個新使用者,並將其儲存到資料庫中。

查詢(Read)

Mongoose 提供了多種查詢方法來檢索資料。我們可以使用 find() 來獲取所有使用者,或者根據條件查詢特定使用者。查詢特定使用者:
查詢所有使用者:

js
async function getUsers() {
  const users = await User.find();
  console.log(users);
}

getUsers();

查詢特定使用者:

js
async function getUserById(id) {
  const user = await User.findById(id);
  console.log(user);
}

getUserById('USER_ID');

更新(Update)

Mongoose 提供 findByIdAndUpdate() 方法來更新資料。你可以選擇返回更新前的資料,也可以設置 new: true 返回更新後的資料。

js
async function updateUser(id) {
  const user = await User.findByIdAndUpdate(id, {
    name: 'Jimmy Chen',
    age: 20
  }, { new: true });
  console.log(user);
}

updateUser('USER_ID');

這段代碼查詢並更新了指定 ID 的使用者,並返回更新後的結果。

刪除(Delete)

使用 findByIdAndDelete() 方法來刪除資料庫中的某個資料。

js
async function deleteUser(id) {
  const result = await User.findByIdAndDelete(id);
  console.log(result);
}

deleteUser('USER_ID');

這段代碼從資料庫中刪除了指定 ID 的使用者。

CRUD 實踐:綜合應用

接下來可以把這些操作整合到 API 中,透過 RESTful 介面來管理資料庫中的資源。

js
const express = require('express');
const mongoose = require('mongoose');
const app = express();

app.use(express.json());

// 連接 MongoDB
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));

// 定義 User 模型
const userSchema = new mongoose.Schema({
  name: String,
  email: String,
  age: Number
});

const User = mongoose.model('User', userSchema);

// API 路由

// 建立使用者 (POST)
app.post('/users', async (req, res) => {
  const user = new User(req.body);
  await user.save();
  res.send(user);
});

// 取得所有使用者 (GET)
app.get('/users', async (req, res) => {
  const users = await User.find();
  res.send(users);
});

// 取得單一使用者 (GET)
app.get('/users/:id', async (req, res) => {
  const user = await User.findById(req.params.id);
  if (!user) return res.status(404).send('User not found');
  res.send(user);
});

// 更新使用者 (PUT)
app.put('/users/:id', async (req, res) => {
  const user = await User.findByIdAndUpdate(req.params.id, req.body, { new: true });
  if (!user) return res.status(404).send('User not found');
  res.send(user);
});

// 刪除使用者 (DELETE)
app.delete('/users/:id', async (req, res) => {
  const user = await User.findByIdAndDelete(req.params.id);
  if (!user) return res.status(404).send('User not found');
  res.send(user);
});

// 啟動伺服器
app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

實際打入 Node.js ,執行結果會如下:
https://ithelp.ithome.com.tw/upload/images/20240925/20169444qzhE9up5U4.png
打開瀏覽器查詢後,結果如下:
https://ithelp.ithome.com.tw/upload/images/20240925/20169444iaoyhCnyI4.png

資料庫操作Max使用

  • 資料驗證: Mongoose 提供了強大的驗證功能,確保在存儲資料之前對其進行正確的檢查。
  • 錯誤處理: 在實作中,要加入適當的錯誤處理邏輯,避免程式崩潰並為使用者提供有用的錯誤訊息。
  • 資料庫索引: 根據常用的查詢條件,為資料庫欄位設置索引可以大幅提高查詢速度。

總結

今天深入探索了資料庫操作中的 CRUD 操作,並透過 Mongoose 實現了增、查、改、刪的功能。我們學習了如何用 Mongoose 模型來定義資料結構,並且通過簡單的 API 操作資料庫。接下來將進一步了解資料庫的操作以及如何進行更複雜的資料管理。


上一篇
Day 12: 資料庫連接:使用 MongoDB 與 Mongoose
下一篇
Day 14:驗證與授權:JWT (JSON Web Token) 簡介
系列文
30 天 Node.js 探索:基礎、進階與實踐26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言