乔需要未知的领域 说明:

问题描述

我正在验证GET请求查询字符串(使用express-joi-validation),并要求用户传递至少一个未在架构中直接指定的额外键值对。

我尝试进行如下验证:

const schema = Joi
    .object({
        requiredKey: Joi.string().required()
        kNownExtraKey: Joi.boolean()
    })
    .pattern(/^/,Joi.string().required())

schema.validate({requiredKey: 'A'}) // valid but shouldn't be
schema.validate({requiredKey: 'A',name: "paul"}) // valid

解决方法

如果您想要至少一个属性:

joi版本 17.2.1

说明:

您需要使用以下公式指定最小键object().min()必需属性的数量+ 1 。在下面的示例中,如果您验证具有3个或4个属性的对象,则验证不会返回错误。

const Joi = require('joi');

const schema = Joi.object().keys({
  one: Joi.string().required(),two: Joi.string().required(),three: Joi.string(),four: Joi.string(),}).min(3);

// works
const data1 = {
  one: 'one',two: 'two',three: 'three',};
console.log(schema.validate(data1).error);

// works
const data2 = {
  one: 'one',four: 'four',};
console.log(schema.validate(data2).error);

// fails
const data3 = {
  one: 'one',};
console.log(schema.validate(data3).error)