6

有三个参数:latitude, longitude, zipcode

我需要一个joi验证

  • 当存在或缺少邮政编码时需要纬度和经度
  • 缺少纬度或经度时需要邮政编码。

像这样的东西?

Joi.object().keys({
    latitude: Joi.number().when('zipcode', { is: undefined, then: Joi.required() }),
    longitude: Joi.number().when('zipcode', { is: undefined, then: Joi.required() }),
    zipcode: Joi.number().when(['latitude', 'longitude'], { is: undefined, then: Joi.required() })
});

我在想有一个更优雅的解决方案可能使用object.and()

4

2 回答 2

2

您可以在以下架构中验证多个条件。

    const schema = Joi.object().keys({
        searchby: Joi.string().valid('phone', '_id', 'cno').required(), // field name
        searchvalue: Joi
            .when('searchby', { is: "phone", then: Joi.string().regex(/^(923)\d{9}$/, 'numbers').max(12).min(12).required() })
            .when('searchby', { is: "_id", then: Joi.objectId().required() })
            .when('searchby', { is: "nic", then: Joi.number().required() })
    });
于 2019-10-11T13:51:01.457 回答
1

此解决方案可能有用:

schema = Joi.object().keys({
  location: Joi.object().keys({
    lat: Joi.number(),
    long: Joi.number()
  }).and('lat', 'long'),
  timezone: Joi.alternatives()
    .when('location', {
        is: null,
        then: Joi.number().required(),
        otherwise: Joi.number()
    })
});

于 2017-01-01T06:49:49.330 回答