博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【node.js】第三方模块joi报错 UnhandledPromiseRejectionWarning: TypeError: Joi.validate is not a function
阅读量:3950 次
发布时间:2019-05-24

本文共 2180 字,大约阅读时间需要 7 分钟。

joi介绍

joi是node.js的第三方模块,用来验证前端提交插入数据库的格式,首先在Joi内部定义好了许多验证规则,并提供语法让你将不同的规则组合起来,形成符合你的验证规则。然后使用这个规则来验证你想要验证的对象是否符合要求

原因

// 文章分类格式校验const validateDemos = Demos => {
// 定义对象验证规则 const schema = {
title: Joi.string().required().error(new Error('标题不符合规则')), content: Joi.string().required().error(new Error('内容不符合规则')), url: Joi.string().required().error(new Error('链接地址非法')), Priority: Joi.number().valid(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10).error(new Error('优先级不符合规则')), cover: Joi.string().error(new Error('封面不符合规则')) }; // 验证 return Joi.validate(Demos, schema, {
// 检测到所有错误 abortEarly: false, // 允许对象包含被忽略的未知键 allowUnknown: true });}

版本原因,我使用的是14.0.6版本的Joi.validate方法,现如今高版本的joi已经不支持该方法

即,直接使用npm install joi安装的模块将会出现UnhandledPromiseRejectionWarning: TypeError: Joi.validate is not a function错误

解决方法

1.降低版本

使用npm install joi@14.0.6语法规定指定版本,下载低版本joi即可继续使用Joi.validate方法

2.使用新语法

新版本joi使用Joi模块的object方法生成验证规则,而不是直接将一个对象作为验证规则

const schema = Joi.object({
a: Joi.string()});

用于验证的validate方法位于使用object返回的对象中

const {
error, value } = schema.validate({
a: 'a string' });

例子:

const Joi = require('joi');const schema = Joi.object({
username: Joi.string() .alphanum() .min(3) .max(30) .required(), password: Joi.string() .pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')), repeat_password: Joi.ref('password'), access_token: [ Joi.string(), Joi.number() ], birth_year: Joi.number() .integer() .min(1900) .max(2013), email: Joi.string() .email({
minDomainSegments: 2, tlds: {
allow: ['com', 'net'] } })}) .with('username', 'birth_year') .xor('password', 'access_token') .with('password', 'repeat_password');schema.validate({
username: 'abc', birth_year: 1994 });// -> { value: { username: 'abc', birth_year: 1994 } }schema.validate({
});// -> { value: {}, error: '"username" is required' }// Also -try {
const value = await schema.validateAsync({
username: 'abc', birth_year: 1994 });}catch (err) {
}

学习新语法

高版本的joi已经不在使用Joi.validate方法验证规则了,随着时间推移低版本将会被淘汰,

转载地址:http://gnuzi.baihongyu.com/

你可能感兴趣的文章
Android开发——ListView局部刷新的实现
查看>>
Android开发——ListView的复用机制源码解析
查看>>
Android开发——架构组件LiveData源码解析
查看>>
IDEA常用快捷键整理
查看>>
【Vue】两个元素同一行显示
查看>>
XXL-Job使用
查看>>
如何在SwaggerAPI中添加统一授权认证
查看>>
多线程
查看>>
【Linux】Centos7 常用命令
查看>>
【Redis】Centos7下安装Redis
查看>>
【Redis】Centos7下搭建Redis集群
查看>>
【Redis】Centos7下搭建Redis集群——哨兵模式
查看>>
【Linux】本地ping不同VM虚拟机
查看>>
【SpringCloud】Hystrix
查看>>
快速阅读——《认知篇》
查看>>
【Asp.net】基本概念
查看>>
【Asp.net】Web服务器控件
查看>>
【Asp.net】内置对象
查看>>
C语言数据类型笔记 by STP
查看>>
C语言指针笔记 by STP
查看>>