前言
上一篇我們認識了基本 Mongoose 的 Schema 寫法,接下來將會針對 Schema 來去認識。
SchemaType
Schema 本身支援所謂的型別驗證,在前面章節我們有撰寫一點基本的
1 2 3 4 5
| const UserSchema = new mongoose.Schema({ account: String password: String, nickname: String, });
|
但是通常來講我們會比較常用第二種寫法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| const UserSchema = new mongoose.Schema({ account: { type: String, }, password: { type: String, }, nickname: { type: String, }, createTime: { type: Date, default: Date.now, } });
|
而 Type 支援的格式非常多,以下只列出比較常見的 SchemaType
- String
- Number
- Boolean
- Date
- Object
- ObjectID
- Array
當然官方還有
…等等
Schema Validators
那為什麼要用第二種寫法呢?主要會跟 Schema Validators 有關,Validators 就是指驗證的部分。
而 Validators 非常多種,接下來也會一一介紹,因此可能會調整一下 UserSchema。
Validators 最基本的就是 required 必填,舉例來講密碼跟帳號就是必填,而加上方式非常簡單
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| const UserSchema = new mongoose.Schema({ account: { type: String, required: true, } password: { type: String, required: true, }, nickname: { type: String, }, createTime: { type: Date, default: Date.now, } });
|
當然 required 也有另一種寫法,也就是陣列形式,而陣列形式的話,你可以自訂錯誤訊息,例如 nickname is required.,而使用方法的話只需要注意陣列中第一個是布林,第二個則是自訂的錯誤訊息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const UserSchema = new mongoose.Schema({ account: { type: String, required: true, } password: { type: String, required: true, }, nickname: { type: String, required: [true, 'nickname is required.'], }, createTime: { type: Date, default: Date.now, } });
|
String Validators
每一個 type 都有可以支援的 Validators 類型,以 String 來講就有以下
uppercase
lowercase
enum
minLength
maxLength
但實際上來講 uppercase、lowercase 是非常少見的,主要是將資料轉換成全大寫或是全小寫,所以下面就不會說明了。
enum
enum 概念很像輸入「範圍」的概念,你想像成 HTML 的 Select 選單,例如使用者的職業類別有以下
那麼就可以這樣寫
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| const UserSchema = new mongoose.Schema({ account: { type: String, required: true, } password: { type: String, required: true, }, nickname: { type: String, required: [true, 'nickname is required.'], }, job: { type: String, enum: [ '科技類', '電子類', '食品加工類', '營造業', ], }, createTime: { type: Date, default: Date.now, } });
|
那麼透過 enum 的功能,使用者就只能輸入這四種類別而不能輸入這之外的,而這邊要注意若有設置 default 的話記得要放進入 enum。
maxLength/minLength
maxLength 與 minLength 相對簡單很多,就是限制 String 可以輸入的長度範圍,例如暱稱不可以超過 20 個字且不得少於 3 個字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| const UserSchema = new mongoose.Schema({ account: { type: String, required: true, } password: { type: String, required: true, }, nickname: { type: String, required: [true, 'nickname is required.'], minLength: 3, maxLength: 20 }, job: { type: String, enum: [ '科技類', '電子類', '食品加工類', '營造業', ] } createTime: { type: Date, default: Date.now, } });
|
後面你可能會想說為什麼密碼不設置長度,主要原因會跟後面有關,只是這邊先不說明。
整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ
Advertisement