Ссылочные ключи схемы Hapijs Joi для повторного использования в других моделях или маршрутах

У меня есть примерная модель, построенная так:

const MyModelResponse = Joi.object().keys({
  id: Joi.number().integer().required()
    .description('ID of the example model'),
  description: Joi.string()
    .description('Description of the example model'),
})
  .description('example instance of MyModel with the unique ID present')
  .label('MyModelResponse');

В моем маршруте я хочу убедиться, что мой входной параметр проверяется на соответствие свойству id MyModeResponse следующим образом:

     validate: {
        params: {
          id: MyModelResponse.id,
        },
        options: { presence: 'required' },
        failAction: failAction('request'),
      }

Это приводит к ошибке проверки схемы при запуске сервера:

AssertionError [ERR_ASSERTION]: Invalid schema content: (id)

Есть ли способ сослаться на ключ схемы? В настоящее время мне приходится прибегать к одному из следующих способов:

Вообще не ссылаясь на мою схему MyModelResponse:

     validate: {
        params: {
          id: Joi.number().integer().description('id of MyModel instance to get'),
        },
        options: { presence: 'required' },
        failAction: failAction('request'),
      }

Не используя конструктор Joi.object.keys(), определяя мою модель следующим образом:

const MyModelResponse = {
  id: Joi.number().integer().required()
    .description('ID of the example model'),
  description: Joi.string()
    .description('Description of the example model'),
}

Нижний подход позволяет мне ссылаться на свойство id в моем маршруте, но не позволяет мне добавлять описания и метки в мою схему. Я попытался использовать MyModel.describe().children.id при проверке маршрута, и я предпринял несколько попыток десериализовать объект id в объект схемы, но безрезультатно.

Мы ценим любые предложения.


person HailZeon    schedule 17.07.2019    source источник


Ответы (1)


Удалите ключи () и используйте следующим образом

const MyModelResponse = Joi.object({
  id: Joi.number().integer().required()
    .description('ID of the example model'),
  description: Joi.string()
    .description('Description of the example model'),
})
  .description('example instance of MyModel with the unique ID present')
  .label('MyModelResponse');
person ilankumaran k ilankumaran k    schedule 20.11.2019