【发布时间】:2020-11-22 13:24:23
【问题描述】:
我正在制作一个应用程序并向其添加功能,以实时检查用户名是否已被使用。
堆栈信息:用于前端的 MongoDB、NodeJS(Express)、VanillaJS。
我在客户端使用 fetch API,在服务器端使用 promise。
我在这里做什么:
我从输入元素中获取值,然后对检查数据库中的值的路由进行 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 调用,而且我对 Promise 很陌生,可能并不完全理解它们。
【问题讨论】:
标签: javascript node.js ajax fetch-api