Построение ошибки API запроса к базе данных - PullRequest
0 голосов
/ 05 мая 2018

Я работаю над простым API, который выполняет запрос INSERT в базу данных SQL, используя информацию, полученную из формы, которую клиенты будут заполнять во внешнем интерфейсе. Мне любопытно, есть ли предпочтительный способ построения сообщения об ошибке запроса.

Используя конкретный пример, у меня есть форма, которую должны заполнять пользователи с атрибутами A, B и C. В базе данных SQL все они применяются с ограничением NOT NULL. Поэтому, если пустая форма была отправлена, будет возвращен следующий объект ошибки:

{
...
errors:
  [ ValidateErrorItem {
      message: "model.a cannot be null"
      type: "..."
      path: "..." 
      value: "..."
      .. },
    ValidateErrorItem {
      message: "model.b cannot be null"
      type: "..."
      path: "..." 
      value: "..."
      .. },
    ValidateErrorItem {
      message: "model.c cannot be null"
      type: "..."
      path: "..." 
      value: "..."
      .. },
  ]
}

Как обычно построить сообщение об ошибке, которое будет отображаться пользователю (кроме простого отображения «Произошла ошибка с запросом»)?

Примечание: я знаю, что этот сценарий можно предотвратить с помощью проверки внешнего интерфейса, но другие вещи могут пойти не так (кроме ненулевой проверки), так что это всего лишь простой пример, когда происходит ошибка, не обязательно то, что я делать на практике.

1 Ответ

0 голосов
/ 05 мая 2018

Подобные проверки должны выполняться для каждого запроса API. Я предпочитаю использовать Joi .

Джой выдаст ошибку всякий раз, когда схема не соответствует ожидаемой. Например

const schema = Joi.object().keys({
  modelA: Joi.string().required(),
  modelB: Joi.string().required(),
  modelC: Joi.string().required(),
});

const myObj = { modelA: 'modelA' };
console.log(Joi.validate(myObj, schema));

Приведенный выше код выдаст ошибку { ValidationError: child "modelB" fails because ["modelB" is required]

Вы также можете добавить сообщение об ошибке клиента, как это

const schema = Joi.object().keys({
  modelA: Joi.string().required(),
  modelB: Joi.string().required().error(new Error('Was expecting a string')),
  modelC: Joi.string().required(),
});
const myObj = { modelA: 'modelA' };
console.log(Joi.validate(myObj, schema));

Это выдаст ошибку

   Error: Was expecting a string

Эти сообщения могут быть проанализированы внешним интерфейсом и показаны как таковые.

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