【问题标题】: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']),
});

【问题讨论】:

    标签: node.js joi


    【解决方案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

    【讨论】:

    • 这不再起作用,因为“有效”不再接受数组类型的参数
    猜你喜欢
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 2013-04-29
    • 2020-07-30
    • 2021-05-19
    • 2017-03-22
    • 1970-01-01
    相关资源
    最近更新 更多