Я довольно новичок в бэкэнд-разработке Node, так как я пришел из внешнего интерфейса.Я разрабатываю HTTP API, используя Express, Mongo, Mongoose и Joi для проверки ввода.
Я использую как Mongoose , так и Joi схема проверки, последний только вконкретные случаи, такие как маршруты post / put / patch.
Использование «уникального» правила в схеме Mongoose для поля электронной почты. Я наткнулся на следующую проблему: Ответы об ошибках Mongoose сильно отличаются от ответов Joi.Как вы можете себе представить, предпочтительнее использовать согласованные ответы, чтобы избежать сложного анализа данных на внешнем интерфейсе для отображения ошибок в пользовательском интерфейсе.
Это пример ответа об ошибке Mongoose для уникальной электронной почты:
{
"errors": {
"email": {
"message": "Error, expected 'email' to be unique. Value: 'lorem.ipsum@yahoo.com'",
"name": "ValidatorError",
"properties": {
"message": "Error, expected 'email' to be unique. Value: 'lorem.ipsum@yahoo.com'",
"type": "unique",
"path": "email",
"value": "lorem.ipsum@yahoo.com"
},
"kind": "unique",
"path": "email",
"value": "lorem.ipsum@yahoo.com"
}
},
"_message": "Author validation failed",
"message": "Author validation failed: email: Error, expected 'email' to be unique. Value: 'lorem.ipsum@yahoo.com'",
"name": "ValidationError"
}
в то время как это пример ответа об ошибке Joi для неверного пароля:
{
"isJoi": true,
"name": "ValidationError",
"details": [
{
"message": "\"password\" with value \"3\" fails to match the required pattern: /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,32}$/",
"path": [
"password"
],
"type": "string.regex.base",
"context": {
"pattern": {},
"value": "3",
"key": "password",
"label": "password"
}
}
],
"_object": {
"username": "thequickbrownfox",
"first_name": "The Quick",
"last_name": "Brown Fox",
"email": "thequickbrownfox@hotmail.com",
"password": "3"
}
}
Обратите внимание, что я также использую Mongoose Unique Validator , чтобы получать уникальные сообщения об ошибках Mongoose вместо значения по умолчаниюE11000 Монго ошибка, которая совершенно безмолвна.Есть ли способ получить похожие сообщения об ошибках в подобных случаях?Спасибо.