Как сгенерировать новый метод Error () с Mongoose, который поддерживает ту же вложенную структуру, что и стандартный объект ошибки валидации? - PullRequest
0 голосов
/ 20 января 2019

Вопрос

Как мне сгенерировать ошибку, которая легче повторяется на внешнем интерфейсе из Mongoose, которая поддерживает стандартную структуру ошибок валидации с использованием new Error()?

Issue

У меня есть несколько проверок, которые выполняются в моей схеме Mongoose. У меня есть функция предварительного сохранения, которую я использую для шифрования пароля с помощью bcrypt. Я пытаюсь убедиться, что перехватываю все обещания, и у меня возникает ситуация, когда я могу получить сообщение об ошибке от bcrypt, если пароль пользователя не был успешно хеширован. Я хотел бы сгенерировать общую ошибку, которую я могу отобразить на внешнем интерфейсе. Прямо сейчас я перебираю ошибки валидации в объекте error.errors, который возвращается из Mongoose в следующем формате:

// Schema
const MySchema = new Schema(
  {
    myField: {
      type: String,
      minlength: [3, "My Field must be 3-30 characters."],
      maxlength: [30, "My Field must be 3-30 characters."],
      required: [true, "My Field is required."],
      trim: true
    },
)

// Errors returned in the following format:

errors: {
  myField: {
    message: "Custom error warns foo must be bar."
  },
  // ... more error'd fields here
}

Я хотел бы добавить пользовательскую ошибку в том же формате, чтобы отдельный объект error.errors, который я отправлял обратно в мой интерфейс в формате JSON, легко повторялся. Прямо сейчас я беру свою ошибку bcrypt и форматирую свой собственный объект в таком же формате, но это не очень элегантный способ сделать что-либо.

Я могу быть смущен тем, как правильно использовать New Error("My custom error here"), и может усложнить мою проверку, чем это необходимо, и мне бы очень хотелось, чтобы это прозрение.

код

  • Вы можете увидеть на строке 88 в моем User-model.js , что я улавливаю ошибку bcrypt и форматирую объект, который похож на ту же иерархию, что и стандартный объект ошибок проверки (выше) отметил).

  • Затем я отправляю объект error.errors через JSON из серверной части Строка 19 в user-controller.js во внешний интерфейс для итерации.

Есть ли более чистый способ использовать New Error() и сделать мою обработку ошибок более приятной, без необходимости форматировать мои собственные объекты ошибок таким образом?

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