2016-12-01 6 views
0

http://hapijs.com/tutorials/validationЕсть ли способ использовать именованную функцию с проверкой Hapi?

Я хотел бы передать функцию в свой блок проверки, который проверяет наличие v в качестве источника и подтверждает, что account, profile и ipAddress присутствуют. Документы говорят, что это возможно, но не имеют примера использования функции var для этого.

Когда я начинаю мой API я получаю: Error: Invalid schema content: (account)

Как я могу использовать функцию с именем, чтобы сделать проверку в Хапи?

Код:

var validateQueryString; 

    validateQueryString = function(value, options, next) { 
    console.dir({ 
     value: value, 
     options: options 
    }); 

    // do some validation here 

    return next(null, value); 
    }; 

    routes.push({ 
    method: 'POST', 
    path: '/export/{source}/{start}/{end?}', 
    config: { 
     validate: { 
     query: { 
      account: validateQueryString, 
      profile: validateQueryString, 
      ipAddress: validateQueryString 
     }, 
     params: { 
      source: joi.string().valid(['a', 'v', 't']), 
      start: joi.string().regex(utcDateTimeRegex), 
      end: joi.string().regex(utcDateTimeRegex) 
     } 
     } 
    }, 
    handler: function(apiRequest, apiReply) {} 
    }); 

Пробовал другие способы вызова этого типа:

account: function(value, options, next) { 
    return validateQueryString(value, options, next); } 

не повезло.

ответ

0

Я не думаю, что у вас может быть одна функция для обработки одновременно.

Как правило, метод для полного «списка» параметра запроса. Вот немного кода для иллюстрации:

function validateQuery(value, options, next){ 
    console.log('validating query elements'); 
    for (var k in value) { 
    console.log(k, '=', value[k]); 
    } 
    next(new Error(null, value); 
} 

И вы установите его следующим образом:

routes.push({ 
    ... 
    validate: { 
     query: validateQuery, 
     params: ... 
    } 
    ... 
} 

Теперь, давайте предположим, что вы попали http://server/myroute?a=1&b=2&c=3, вы получите следующий результат:

validating query elements 
a = 1 
b = 2 
c = 3 

Для того, чтобы отправить ошибку, необходимо позвонить по телефону next() следующим образом:

next(new Error('some is wrong'), value); 

Таким образом, «правильный» способ - иметь метод запроса и параметров.

Надеюсь, это поможет.

0

Я бы порекомендовал вам то, что вы делаете, вне пределов Joi. Joi предназначен для проверки схемы против объекта JS. То, что вы хотите, - это проверка времени выполнения от правил, которые существуют вне самой схемы. Hapi имеет что-то построенное для этого: server method. Используя методы сервера, вы можете применить к ним свои деловые валидации, отделяя проблемы модели ввода модели и модели выходной модели модели с помощью Joi.