Вопрос
Как мне сгенерировать ошибку, которая легче повторяется на внешнем интерфейсе из 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()
и сделать мою обработку ошибок более приятной, без необходимости форматировать мои собственные объекты ошибок таким образом?