Node.js/Hapijs — проверка всех ключей и значений в полезной нагрузке объекта JSON без именования ключей

Некоторые функции моего API включают в себя прием данных, отправленных POST, и передачу их другому приложению для обработки. Ввод полезной нагрузки всегда отправляется в виде объекта JSON, а значения всегда должны быть числовыми. Однако, поскольку существуют сотни различных вариантов объектов JSON (поскольку существует растущее разнообразие моделей, с которыми они сопоставляются в другом приложении), я не могу назвать каждый из ключей и значений для конфигурации проверки. опция в маршруте POST, который я определил в Hapijs.

Я хотел бы сделать что-то подобное, но представьте, что должно быть больше хакерского обходного пути:

config: {
    validate: {
        payload: Joi.object().keys(Joi.number())    
    }
}

Возможно, есть какой-то способ перебрать объект и убедиться, что все значения являются числовыми — в рамках опции проверки — но это кажется довольно неэффективным.


person za13    schedule 03.03.2015    source источник


Ответы (1)


Вы можете использовать Joi.object().pattern(regex, schema); для проверки неизвестных ключей.

Если вы просто хотите проверить свойства всех чисел, вы можете просто сделать:

config: {
    payload: { 
        output: data 
    },
    validate: {
        payload: Joi.object().pattern(/.*/, Joi.number()) // Any key   
    }
}

Если вы также хотите проверить ключи, вы можете добавить более конкретное регулярное выражение.

Пример Joi, в котором разрешены только клавиши с именами a-z:

var Joi = require('joi');

var object = {
    a: 1,
    b: 2,
    c1: 3  // <--- Bad key
};

var schema = Joi.object().pattern(/^[a-z]$/, Joi.number());

Joi.assert(object, schema);

Выход:

Error: {
  "a": 1,
  "b": 2,
  "c1" [1]: 3
}

[1] "c1" is not allowed
person Matt Harrison    schedule 04.03.2015