Я начал использовать v17
из Hapi.js
, и у меня возникают проблемы при использовании предварительного обработчика.
Я хочу сохранить пользователя в базе данных, но сначала я использую предварительный обработчик, чтобы проверить, существует ли пользователь уже.Если пользователь существует, я хочу сгенерировать ошибку.Структура моего маршрута такова ...
module.exports = {
method: "POST",
path: "/users",
config: {
auth: false,
pre: [{ method: verify_unique_user}],
handler: create_user.create
}
}
Содержимое verify_unique_user
равно ...
async function verify_unique_user(req, h) {
await User.findOne({
$or: [{email: req.payload.email}, {username: req.payload.username}]
},
(err, user) => {
if (user) {
// Check if username exists.
if (user.username === req.payload.username) {
throw Boom.badRequest("Username taken!");
}
// Check if email exists.
if (user.email === req.payload.email) {
throw Boom.badRequest("Email taken!");
}
}
});
return req;
}
Предположим, что пользователь уже существует в базе данных.Тогда будет выдана ошибка из любого из операторов if
.Когда это происходит, я получаю следующую ошибку ...
events.js: 167
throw er; // Unhandled 'error' event
^
Ошибка: имя пользователя занято!на User.findOne (/Users/ericbolboa/Desktop/Warble/server/src/users/util/user_function.js:16:16)
Это разбило мой сервер.Это не то, что я хочу.Если я выдаю ошибку в моей функции обработчика, ответ будет выглядеть следующим образом ...
{
"statusCode": 400,
"error": "Bad Request",
"message": "error"
}
Но всякий раз, когда я выдаю ошибку в предварительном обработчике, мой сервер падает.Как правильно выкинуть ошибки?