Я создаю приложение и добавляю в него функцию, которая проверяет в реальном времени, если имя пользователя уже занято.
Информация о стеке : MongoDB , NodeJS (Express), Vanilla JS для внешнего интерфейса.
Я использую API извлечения на стороне клиента и обещания на стороне сервера.
Что я здесь делаю:
Я беру значение из входного элемента и затем вызываю AJAX маршрут, который проверяет базу данных на значение . Если база данных возвращает некоторые данные, это означает, что имя пользователя уже занято, если данные не возвращены, тогда оно доступно для использования.
Сообщение об ошибке, которое я получаю, ==>
(node:1697) UnhandledPromiseRejectionWarning: username already in use
(node:1697) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block,
or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:1697) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Это маршрут и связанная функция:
app.get("/api/check/:username", (req,res)=>{
checkDuplicate(req,res);
});
function checkDuplicate(req, res) {
return new Promise(function(resolve, reject){
User.findOne({username: req.params.username}, function(err, data){
//no data found, username availabe
if(!data){
resolve();
//database error
}else if(err){
reject("some error occurred");
//data found, user already exist
}else{
reject("username already taken");
}
});
});
}
это внешний интерфейс javascript код:
fetch(`/api/check/${username.value}`)
.then(showMessage("username Availabe, you are ready to go"))
.catch(err => showMessage(err, true));
PS: это первый раз, когда я использую такие вызовы AJAX, а также я новичок в обещаниях и, вероятно, не совсем понимаю их.