gpt4 book ai didi

javascript - Mongoose 和 NodeJS : Creating a unique system-generated username

转载 作者:搜寻专家 更新时间:2023-11-01 00:37:31 27 4
gpt4 key购买 nike

我希望能够创建一个系统生成的唯一用户名。然而,mongoose findOne 函数的异步特性让我感到困惑。

我有一个 generateUniqueAccountName 函数,它接受一个建议的用户名,并检查 MongoDB 是否建议的用户名是唯一的。如果它不是唯一的,则会生成一个新名称,直到找到唯一的用户名。

听起来很简单,但是甚至在找到唯一名称之前就退出了 generateUniqueAccountName。我尝试使用 Q(此处未显示我的实现)但也无法使其工作。

将不胜感激任何帮助。谢谢!

这是 generateUniqueAccountName 函数:

 /**
* Returns a unique account name based on proposed name
* @param {String} proposedName
* @return {Promise}
*/
function generateUniqueAccountName(proposedName) {

return Account.findOne({accountName: proposedName})
.then(function(account) {
if (account != null) {
console.log('no can do try again: ' + proposedName);
proposedName += Math.floor((Math.random() * 100) + 1);
generateUniqueAccountName(proposedName);
} else {
console.log('proposed name is unique' + proposedName);
}
return proposedName;
})
.catch(function(err) {
console.error(err);
throw err;
});
}

generateUniqueAccountName 的调用方式如下:

.then(function(newAccount) {
// Next generate a unique account name
console.log('Generating unique account name ...');
let proposedName = (accounts[i].acctFName + accounts[i].acctLName)
.replace(/\s/g, '');

return generateUniqueAccountName(proposedName.toLowerCase())
.then(function(accountName) {
console.log('the unique name is ' + accountName);
newAccount.accountName = accountName;
return newAccount;
})
.catch(function(err) {
throw err;
});
})
.then(saving_part);

这是一个示例输出:

Generating unique account name ...
no can do try again: teylim
no can do try again: michaelalee
no can do try again: joeykwa
the unique name is teylim86
the unique name is michaelalee72
the unique name is joeykwa91
no can do try again: trishalee
the unique name is trishalee7
proposed name: michaelalee72 is unique
proposed name: joeykwa91 is unique
no can do try again: teylim86
no can do try again: trishalee7
proposed name: teylim8641 is unique
proposed name: trishalee734 is unique
Saving account trishalee7

查看 trishalee,如您所见,系统尝试保存用户名 trishalee7,即使日志显示 trishalee7 不是唯一名称

最佳答案

您需要做的就是在 generateUniqueAccountName(proposedName) 之前添加 return 语句:

function generateUniqueAccountName(proposedName) {
return Account
.findOne({accountName: proposedName})
.then(function(account) {
if (account) {
console.log('no can do try again: ' + proposedName);
proposedName += Math.floor((Math.random() * 100) + 1);
return generateUniqueAccountName(proposedName); // <== return statement here
}
console.log('proposed name is unique' + proposedName);
return proposedName;
})
.catch(function(err) {
console.error(err);
throw err;
});
}

关于javascript - Mongoose 和 NodeJS : Creating a unique system-generated username,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46326497/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com