Sequelize 有 validations 和 constraints 兩種不一樣可以設定的規則。
根據官網的說明,validations 是在進行 SQL 指令前會先檢查的規則,例如 isEmpty, 或 isLowercase,可以檢查是不是空字串和是不是小寫。這個階段的檢查不會進行任何 SQL 指令。constraints 則是定義在 SQL 中的規則。例如 username 是 unique 的,那新增的時候要先在 database 搜尋一次,確認沒有重複才能新增。如果有重複就會報錯。但不管如何一定要先跑過 SQL 才會有結果,所以這種規則會跑 SQL。
毛問題:Sequelize 我說不得為空你還給我空空
我設了 isEmpty: false
,但沒輸入東西還是過關,寫到資料庫去了。覺得滿頭問號。啊 (幹),原來是沒輸入是 null,所以擋不到。如果是輸入 ''
這樣的話,就可以擋住。哇這種細節很難發現,雖然之前遇過了,但還是會忘。
這時候就要加 notNull: true
,然後他就會報錯,跟你說還要加 allowNull
。這兩個好像是一起用的。
有一種規則是 validations 和 constraints 的混合,它就是 allowNull。官網的說明。這個規則會在 validation 的檢查時生效,也可能在 SQL 的時候生效,所以說是混種。