如何实现NPM Joi仅对存在字段验证,不存在则忽略?
Joi验证:仅对存在的字段应用验证
问题场景
我尝试了以下代码,运行正常:
const Joi = require('joi'); let schema = Joi.object().keys({ id:Joi.number().required(), first_name: Joi.string().min(2).max(10), last_name: Joi.string().min(2).max(10) }); const req = { id: 1, first_name: 'AAA', last_name: 'BBB' }; Joi.validate(req, schema, (err) => { console.log(err); });
但当请求数据为:
const req = { id: 1, last_name: 'BBB' };
时,Joi提示first_name不能为空。需要配置Joi使其仅对请求数据中存在的字段应用验证,不存在的字段则忽略验证。
解决方案
给非必填字段添加optional()方法,即可让Joi忽略不存在的字段,只验证存在的字段。
修改后的schema代码:
const Joi = require('joi'); let schema = Joi.object().keys({ id: Joi.number().required(), first_name: Joi.string().min(2).max(10).optional(), last_name: Joi.string().min(2).max(10).optional() });
补充说明
- 若使用Joi v16及以上版本,字段默认是可选的,只要不添加
required()就不会强制要求字段存在,但显式声明optional()能让代码意图更清晰。 - 如果需要返回所有验证错误而非仅第一个,可在验证时传入
abortEarly: false选项:
Joi.validate(req, schema, { abortEarly: false }, (err) => { console.log(err); });
内容的提问来源于stack exchange,提问作者Naga Harish M
相关产品推荐
相关产品推荐

