เนื่องจากใช้ HapiJS เป็น framework ของโปรเจค จึงใช้ Joi เป็น validator ซึ่งก็เหมือน Framework ตัวอื่นๆ คือ สามารถระบุได้ว่า field ใดนั้น required หรือ field ใดนั้นไม่ required
Joi มี method สำหรับการระบุข้างต้น คือ
required() และ
optional() ตามลำดับ ซึ่งถ้าไม่ระบุจะเป็น optional โดยอัตโนมัติ แต่มันไม่ได้จบเพียงเท่านี้ เพราะ Library ตัวนี้มีบางอย่างที่ขัดกับ validator ของ framework อื่นหลบซ่อนอยู่
สำหรับ
required() จะเป็นปกติเหมือน framework ทั่วไป คือ field นั้นต้องมีค่า ซึ่งค่านั้นต้องไ
ม่ใช่ null หรือ empty string
สำหรับ
optional() จะมีความแตกต่างจาก framework อื่น คือ field นั้นต้องมีค่า (ซึ่งค่านั้นต้อง
ไม่ใช่ null หรือ empty string) หรือ field นั้นต้องหายไปเลย (
undefined) อย่างใดอย่างหนึ่งเท่านั้น
อย่างไรก็ตาม สำหรับ framework ทั่วไป ในกรณีที่ไม่ระบุว่า required ความเป็นไปได้ของ field นั้น คือ มีค่าเป็นอะไรก็ได้รวมถึง null และ empty string ด้วย หรือ field นั้นจะหายไปเลยก็ได้
จะเห็นได้ว่า Joi ต่อให้เป็น optional ก็ไม่สามารถส่งค่า null หรือ empty string มาได้ วิธีแก้ไข คือ เพิ่ม
.allow(null) และ
.allow('') ต่อท้าย field ที่เป็น optional ด้วย
ปล. มีคนเปิด Issue เกี่ยวกับเรื่องนี้ ให้รวมค่า null กับ empty string เป็น optional ของ Joi ด้วย แต่ก็ได้คำตอบว่า
มันโคตรจะไม่ปกติเลยหรือมันไม่ใช่ common use case ซึ่งจากคำตอบก็รู้แล้วแน่ๆว่า จะไม่มีการแก้ไขเกี่ยวกับเรื่องนี้ในอนาคตแน่นอน
สำหรับข้อมูลเพิ่มเติม สามารถอ่านได้ที่
How to allow a string or null?
Joi.string().optional() doesn't treat an empty string as unset