是 Ray 不是 Array

整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ

Advertisement
2022-02-21 Nodejs

(9)被迫吃芒果的前端工程師 - Mongoose - Connect MongoDB 與 Schema

前言

接下來我們將會進入 Express 開發章節,因此就會開始使用 Mongoose 連接資料庫,但是在一開始的起手式基本上就是先認識 Schema。

Connect MongoDB

相信你應該已經使用 express-generator 建立好一個 Express 應用程式,因此在這個專案下面建立一個資料夾叫做 connections 資料夾,然後再建立一個檔案叫做 database.js。

而連接 MongoDB 的方式很簡單,首先先請入 Mongoose

1
const mongoose = require('mongoose');

然後開始撰寫連接方式

1
mongoose.connect('MongoDB URL');

而 MongoDB 的 URL 可以在終端機你輸入 mongo 之後上方可以看到

MongoDB URL
MongoDB URL

因此就是 mongodb://127.0.0.1:27017,而這邊我們將會指定要連接的資料庫,例如 example,那麼就要這樣寫

1
mongoose.connect('mongodb://127.0.0.1:27017/example');

那麼接下來你就可以回到 app.js 中直接寫 require('./connections/database'); 這時候你終端機輸入 npm start 基本上你會發現沒有任何的提示訊息,因為預設狀況下 mongoose 連接上也不會跟你說,因此你可以再打開 database.js 檔案,然後加入以下兩行

1
2
mongoose.connection.once('open', () => console.log('connected to database'));
mongoose.connection.on('error', (error) => console.error('database error', error));

首先第一行 once 的意思是我只觸發一次,然後當連接上資料庫後就會輸出 connected to database

connected to database
connected to database

而第二行的 on 則是會實時監聽錯誤訊息,例如突然 MongoDB 不能連接上,那麼 database error 就會立刻噴出來

database error
database error

Schema

Schema 中文是「架構」的意思,前面我們已經透過 Mongoose 連接上 MongoDB,那接下來就必須定義 Schema,而 Schema 也類似 Model 概念。

而 Schema 類似再告知 MongoDB 我們要儲存什麼資料,因此首先我們先定義一個使用者的表,而通常使用者在註冊時必須提供哪些資料,以常見來講的就是以下

  • 使用者帳號
  • 使用者密碼
  • 使用者暱稱
  • 帳號建立日期

那該怎麼寫呢?首先請先在專案底下建立一個 Model 資料夾,然後取名為 User.js,接下來在裡面引入 Mongoose

1
const mongoose = require('mongoose');

引入完畢之後宣告一個變數接收 Schema 的實例

1
2
3
const UserSchema = new mongoose.Schema({
...
});

而內容非常簡單,就依序填入物件屬性即可,如果你寫過 Vue 的話可能會覺得與 Props 概念很像,這邊我就直接填寫相關參數

1
2
3
4
5
6
7
8
9
const UserSchema = new mongoose.Schema({
account: String,
password: String,
nickname: String,
createTime: {
type: Date,
default: Date.now,
}
});

基本上可以發現 createTime 會特別寫一個 default,主要原因是當使用者建立帳號時,這個帳號建立日期預設是會自己帶上的,因此可以不用寫。

那麼以上就是最簡單基本的 Schema 寫法,下一篇開始會針對 Schema 的內容開始說明。

整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ

Advertisement

你的支持會直接轉換成更多技術筆記

如果我的筆記讓你少踩一個坑、節省 Debug 的時間,
也許你可以請我喝杯咖啡,讓我繼續當個不是 Array 的 Ray ☕

buymeacoffee | line | portaly

Terminal

分享這篇文章

留言

© 2026 Ray. All rights reserved.

Powered by Ray Theme