【问题标题】:How to validade if an Array contains another key value using Joi?如何使用 Joi 验证数组是否包含另一个键值?
【发布时间】:2020-06-23 04:25:24
【问题描述】:

我想验证driverId不能在passengersId中,所以我尝试了这个:

    driverId: Joi
        .string()
        .min(24)
        .max(24)
        .alphanum()
        .required(),

    passengersId: Joi
        .array()
        .items(Joi.string().min(24).max(24).alphanum(), Joi.string().label('driverId').forbidden())
        .min(1)
        .required(),

但它不会允许乘客 ID 中的任何 id 与 driverId 格式匹配。

请求:

{
    "date": "2020-05-06",
    "driverId": "5eef835636187301529b312c",
    "passengersId": ["5eef835636187301529b312c","5eef847088632e0178c2e85b"],
    "destinyId": "5eed7c3b5149460a45b85091"
}

验证:

{
  "statusCode": 400,
  "error": "Bad Request",
  "message": "\"passengersId[0]\" contains an excluded value. \"passengersId[1]\" contains an excluded value",
  "validation": {
    "source": "body",
    "keys": [
      "passengersId.0",
      "passengersId.1"
    ]
  }
}

编辑1: 如果我这样验证,它可以工作,但是当尝试在valid() 中使用Joi.ref('driverId') 时,它就不起作用了。

passengersId: Joi
        .array()
        .items(Joi.string().min(24).max(24).alphanum(), Joi.string().valid('5eef835636187301529b312c').forbidden())
        .required(),

【问题讨论】:

    标签: node.js joi


    【解决方案1】:

    已解决:在密钥名称前使用 Joi.in 和“/”来引用前一个密钥。

    我用来解决问题的来源:LINK

    passengersId: Joi
                .array()
                .items(Joi.string().min(24).max(24).alphanum(), Joi.string().valid(Joi.in('/driverId')).forbidden())
                .required(),
    

    【讨论】:

      猜你喜欢
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 2019-06-04
      • 1970-01-01
      • 2021-06-06
      • 2022-07-27
      • 1970-01-01
      相关资源
      最近更新 更多