Menu

Monday, August 14, 2017

[NodeJS] Optional Field ของ Joi ไม่อนุญาตค่า null และ empty string
[NodeJS] Optional Field of Joi Validator not Allow Null and Empty String

เนื่องจากใช้ 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

No comments:

Post a Comment