TypeError: Joi.validate is not a function的解决方法
问题
使用joi模块中的validate方法进行表单验证时,命令窗口报错TypeError: Joi.validate is not a function
// 定义对象的验证规则
const schema = {
username: Joi.string().min(2).max(5).required().error(new Error('username属性没有通过验证')),
birth: Joi.number().min(1900).max(2020).error(new Error('birth没有通过验证'))
};
async function run () {
try {
// 实施验证
await Joi.validate({username: 'ab', birth: 1800}, schema);
}catch (ex) {
console.log(ex.message);
return;
}
console.log('验证通过')
}
原因
老版本的Joi.validate方法被弃用,新版本的joi不支持该方法
解决方法
方法一
版本回退,卸载现在的joi,重新安装一个以前的版本
//卸载当前版本
npm uninstall joi
//回退版本
npm install @14.3.1
方法二
使用新版joi的验证方法 validateAsync()
详细使用方法可参照joi官方介绍 https://joi.dev/api/?v=17.4.2
参照新版方法,把代码改为
// 定义对象的验证规则
// const schema = {
// username: Joi.string().min(2).max(5).required().error(new Error('username属性没有通过验证')),
// birth: Joi.number().min(1900).max(2020).error(new Error('birth没有通过验证'))
// };
const schema = Joi.object({
username: Joi.string().min(2).max(5).required().error(new Error('username属性没有通过验证')),
birth: Joi.number().min(1900).max(2020).error(new Error('birth没有通过验证'))
});
async function run() {
try {
// 实施验证
// await Joi.validate({ username: 'ab', birth: 1800 }, schema);
await schema.validateAsync({username: 'ab', birth: 1800 });
} catch (ex) {
console.log(ex.message);
return;
}
console.log('验证通过');
}
run();
验证通过