Попробуйте альтернативы JOI - нужен один, который требуется - PullRequest
1 голос
/ 03 апреля 2020

Я пытаюсь проверить строку запроса, используя JOI и express -validation.

Мне нужно, чтобы параметр запроса? Query [primaryOrgId] = 5d2f2c836aeed10026ccba11 был либо отдельной строкой, либо массивом строк , и это обязательно.

Следующая схема проверяет primaryOrgId, как и ожидалось, когда он присутствует, но не проверяет, требуется ли это:

 index: {
    body: {},
    query: {
      query: {
        primaryOrgId: Joi.alternatives().try(
          Joi.array().items(Joi.string().regex(mongoId)),
          Joi.string().regex(mongoId),
        ).required()
      },
    },
    options: {
      allowUnknownQuery: false,
      allowUnknownBody: false,
    },
  },

Я также пробовал :

 index: {
    body: {},
    query: {
      query: {
        primaryOrgId: Joi.alternatives().try(
          Joi.array().items(Joi.string().regex(mongoId).required()),
          Joi.string().regex(mongoId).required(),
        )
      },
    },
    options: {
      allowUnknownQuery: false,
      allowUnknownBody: false,
    },
  },
}

Как я могу убедиться, что primaryOrgId присутствует в строке запроса?

1 Ответ

1 голос
/ 03 апреля 2020

Я не уверен на 100% в ваших требованиях, но вот схема Joi ("@hapi/joi": "^17.1.1") с некоторыми изменениями:

const schema = Joi.alternatives().try(
  Joi.array().min(1).items(Joi.string().trim()), // length have to be at least 1
  Joi.string().trim()
).required(); // required added

// String
console.log(schema.validate(undefined)); // error: [Error [ValidationError]: "value" is required]
console.log(schema.validate('')); // error: [Error [ValidationError]: "value" is not allowed to be empty]
console.log(schema.validate(' ')); // error: [Error [ValidationError]: "value" is not allowed to be empty]
console.log(schema.validate('foo')); // value: 'foo'

// Array
console.log(schema.validate([])); // error: [Error [ValidationError]: "value" must contain at least 1 items]
console.log(schema.validate([' '])); // error: [Error [ValidationError]: "[0]" is not allowed to be empty]
console.log(schema.validate(['foo'])); // value: [ 'foo' ]
console.log(schema.validate(['foo', 'bar'])); //  value: [ 'foo', 'bar' ]

Дайте мне знать, если это работает для вас. В противном случае я обновлю свой ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...