Nodejs - Joi 检查字符串是不是在给定列表中

Posted

技术标签:

【中文标题】Nodejs - Joi 检查字符串是不是在给定列表中【英文标题】:Nodejs - Joi Check if string is in a given listNodejs - Joi 检查字符串是否在给定列表中 【发布时间】:2017-05-15 11:26:40 【问题描述】:

我使用Joi package 进行服务器端验证。我想检查给定字符串是否在给定列表中或不在给定列表中。(为值定义黑名单或白名单) sth like an "in" or "notIn" function.我该怎么做?

var schema = Joi.object().keys(
    firstname: Joi.string().in(['a','b']),
    lastname : Joi.string().notIn(['c','d']),
);

【问题讨论】:

【参考方案1】:

您正在寻找validinvalid 函数。 v16:https://hapi.dev/module/joi/api/?v=16.1.8#anyvalidvalues---aliases-equal v17:https://hapi.dev/module/joi/api/?v=17.1.1#anyvalidvalues---aliases-equal

从 Joi v16 开始,validinvalid 不再接受数组,它们采用可变数量的参数。

你的代码变成了

var schema = Joi.object().keys(
    firstname: Joi.string().valid(...['a','b']),
    lastname: Joi.string().invalid(...['c','d']),
);

如果没有从数组中获取值,也可以直接作为 .valid('a', 'b') 传入 (-:

【讨论】:

在 joi/hapi 中没有有效或无效的选项:| @BadriDerakhshan:如果你说的是@hapi/joi,那么就没有@hapi/joi了!该软件包上个月已弃用,Joi 正式回归 Joi。 (npmjs.com/package/@hapi/joi)(@hapi/joi 中也存在有效和无效)- 这有点令人沮丧,因为去年用户必须从 Joi 切换到 @hapi/joi 并在一年内再次回到 Joi :-)跨度> 【参考方案2】:

怎么样:

var schema = Joi.object().keys(
    firstname: Joi.string().valid(['a','b']),
    lastname : Joi.string().invalid(['c','d']),
);

还有别名:.allow 和 .only

和 .disallow 和 .not

【讨论】:

这不再起作用,因为“有效”不再接受数组类型的参数

以上是关于Nodejs - Joi 检查字符串是不是在给定列表中的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:Joi.validate 不是函数

在 PostgreSQL 函数中,是不是可以检查列值是不是与给定参数值匹配?

检查给定行和列总和是不是只有 2 行的二进制矩阵

检查给定列表中的元素是不是存在于 DataFrame 的数组列中

SQL检查组是不是包含给定列的某些值(ORACLE)

根据列是不是包含给定字符串设置标志列