iT邦幫忙

2023 iThome 鐵人賽

DAY 9
1

大綱

  1. MongoDB簡介
  2. Mongoose簡介
  3. 將後端專案連接到資料庫

1. MongoDB簡介

https://ithelp.ithome.com.tw/upload/images/20230923/20136558MTOKnxljK8.png

MongoDB 是一種 NoSQL(非關聯式) 資料庫,用C++等語言撰寫而成,以解決應用程式開發社群中的大量現實問題。
專為可擴展性、高性能和高可用性而設計。

補充:什麼是NoSQL(資料來源:amazon)

特點

  • 文件導向的資料庫:MongoDB 使用 BSON(Binary JSON)格式儲存其資料。不同於傳統的關聯型資料庫,它允許儲存的結構每一筆都不同。使得資料模型非常靈活,能夠輕鬆適應資料結構的變化。

  • 擴展性:MongoDB 是為水平擴展設計的,它可以透過增加更多的伺服器來擴展其資料儲存空間,而不需要進行大量的前期架構設計。

  • 高效能 :MongoDB 支援多種索引類型,包括單一欄位、複合(多個欄位)、多鍵(陣列)、地理空間、文字及雜湊。使得查詢非常有效率。另外它也對於讀寫操作進行了優化,能夠快速回應高負載的請求。

  • 高可用性:MongoDB 的複製集功能支援資料的冗餘存儲和自動故障轉移。這確保了即使某些伺服器或資料中心失效,資料依然可以使用且系統也能持續運作。

2. Mongoose簡介

Mongoose 是一個專為 Node.js 設計的 MongoDB 物件資料模型 (ODM) 函式庫。它提供了一個直覺且具有豐富特性的界面來操作 MongoDB 資料。

特點

  • 結構化的資料模型定義:使用 Mongoose,開發者可以定義資料的結構和驗證規則。
  • 資料驗證:Mongoose 提供了內建的驗證方法,以及自定義的驗證功能。
  • 查詢建構:提供了一個連鎖式的查詢語言,使查詢變得簡單且直觀。
  • 中介軟體(Middleware):在操作前後,可以使用 Mongoose 的中介軟體功能來定義自定義邏輯。

Mongoose 和 MongoDB 的關聯:

https://ithelp.ithome.com.tw/upload/images/20230923/20136558l6JzsYwH6w.png
Mongoose 基於 MongoDB 的 Node.js 驅動程式建立,作為一個中間層提供了更高級的 API,讓開發者更方便在 Node.js 使用中使用 MongoDB。
簡而言之,MongoDB 是一個 NoSQL 資料庫,而 Mongoose 則是讓 Node.js 開發者更容易與 MongoDB 互動的工具。

3. 將後端專案連接到資料庫

(一)安裝mongoose和cofig套件

首先安裝mongooseconfig

npm install --save mongoose
npm install --save config

(二)建立連線的設定檔

在專案底下建立一個config資料夾,並在該資料夾底下建立db.jsdefault.json
https://ithelp.ithome.com.tw/upload/images/20230924/20136558oeDSCXkQWt.jpg

default.json(mongoURI等等要放入DB的連結)

{
    "mongoURI": "",
}

db.js

//引入mongoose
const mongoose  = require('mongoose');
const config = require('config');
const db = config.get('mongoURI');

const connectDB = async() =>{
    try{
        await mongoose.connect(db);
        console.log('MongoDB Connected...');
        
    } catch(err){   
        console.error(err.message);

        //當失敗的時候立刻離開此程式
        process.exit(1);
    }
}

module.exports = connectDB;

設定完成後,到server.js裡引入connectDB方法並呼叫

//server.js
const express = require('express');
const mongoose =  require('mongoose');
const connectDB = require('./config/db');
const app = express();
const port = 5000;
const postRoutes = require('./routes/posts-routes');
const bodyParser = require('body-parser');

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

app.use(bodyParser.json());

app.use('/api/posts',postRoutes);
...(略)

(三)MongoDB註冊

先到mongoDB官網註冊,註冊並登入後會顯示以下頁面
https://ithelp.ithome.com.tw/upload/images/20230924/20136558jTOGLzGkdF.jpg

點擊Create
https://ithelp.ithome.com.tw/upload/images/20230924/201365582sOi1B0MrJ.jpg

相關設定選擇完後,點擊Create
https://ithelp.ithome.com.tw/upload/images/20230924/20136558io0nsEo299.jpg

跳到Quick Start後,先點擊Create User
https://ithelp.ithome.com.tw/upload/images/20230924/201365585a2PCtbOdz.jpg

接著在同一頁往下滑,點擊Finish
https://ithelp.ithome.com.tw/upload/images/20230924/201365582ToJaZtG2U.jpg

看到Cluster建立完成
https://ithelp.ithome.com.tw/upload/images/20230924/20136558Rri4SCVgdX.jpg

點擊Connect,會出現彈窗,選擇VScode
https://ithelp.ithome.com.tw/upload/images/20230924/20136558BcLQ8q7meX.jpg

將3.Connect to your MongoDB deployment.裡的string複製下來,等等要貼到後端專案裡。
https://ithelp.ithome.com.tw/upload/images/20230924/20136558rIfYzjKXtn.jpg

(四)連接資料庫

將剛剛複製下來的string放到config/default.json

default.json

{
    "mongoURI": "(將你複製的string貼到這裡,<password>請自行輸入當初建立使用者設定的密碼)",
}

接著下指令啟動server

npm start 

/images/emoticon/emoticon07.gif
若看到我們剛剛設置的訊息就表示順利連接資料庫了
https://ithelp.ithome.com.tw/upload/images/20230924/20136558kUc52IHN8c.jpg

參考資料:

https://www.topcoder.com/thrive/articles/how-to-connect-mongodb-to-node-js-using-mongoose
https://www.mongodb.com/docs/drivers/node/current/quick-start/connect-to-mongodb/


上一篇
[Day8] 文章更新和刪除API開發
下一篇
[Day10] 建立文章的Schema讓文章API與真實資料庫互動
系列文
初探全端之旅: 以MERN技術建立個人部落格31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言