Joi对字符串字段的校验-empty
NodeJs, Joi
Joi
字数统计: 311(字)
阅读时长: 1(分)
后端用NodeJs开发,在router时候,我们可能会用到 Joi 组件帮助我们对get, patch等方法的params或者body进行校验。
1 2 3 4 5
| router.route('/abc') .patch(hasPermissions('xxx'), [ validateParams(Joi.object({uuid: Joi.string().uuid().required()})), validateBody(validationSchema.editData) ], indexController.editAction)
|
只能为字符串,但要注意empty
1 2 3 4 5 6 7
| let schema = Joi.object({ name : Joi.string().empty(""), }); let{error, value} = schema.validate(data);
let data = {name:""} /*通过校验*/ let data = {name:null} /*不通过校验, 提示name必须为string类型*/
|
这里着重说明下empty用法,API 17.3.0如下
any.empty(schema)
Considers anything that matches the schema to be empty (undefined).
1 2 3 4
| let schema = Joi.string().empty(''); schema.validate(''); // returns { error: null, value: undefined } schema = schema.empty(); schema.validate(''); // returns { error: "value" is not allowed to be empty, value: '' }
|
如果用了name : Joi.string().empty(“”),那么name不会传到editAction里面。也就是说’'的情况被忽略。如下场景
- 什么什么时候给了name变量值,如张三
- 想在前端给name的输入框,删除张三,保存后,name的值传到后端是’’
- 然而,在Joi校验时候,name=''传不到controller的action方法,也就不能保存空字串了。
允许空字符串和null
1 2 3
| let schema = Joi.object({ name : Joi.string().allow(...[null, ""]), });
|