Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 生成可用的新用户名,始终未定义_Node.js_Mongoose - Fatal编程技术网

Node.js 生成可用的新用户名,始终未定义

Node.js 生成可用的新用户名,始终未定义,node.js,mongoose,Node.js,Mongoose,我有一个生成可用用户名的函数,但总是返回未定义的用户名。我尝试了很多方法,在这种情况下是一个递归函数,但我总是得到相同的结果,你能帮我吗?谢谢 代码如下: function generateNewUsernameAvailable(userName, number){ console.log('FUNCTION generateNewUsernameAvailable '+userName+' with number '+number); User.countDocuments({ 'u

我有一个生成可用用户名的函数,但总是返回未定义的用户名。我尝试了很多方法,在这种情况下是一个递归函数,但我总是得到相同的结果,你能帮我吗?谢谢

代码如下:

function generateNewUsernameAvailable(userName, number){
  console.log('FUNCTION generateNewUsernameAvailable '+userName+' with number '+number);
  User.countDocuments({ 'userName' : userName+number }, (err, count) => {
    if (err) {
      return `Error: ${err}`;
    }
    if (count == 0) {
      return userName+number;
    }else{
      generateNewUsernameAvailable(userName, number+1);
    }});
}

module.exports.existsUserName = function(req,res){
  let userName = req.body.userName;
  console.log('POST existsUserName '+userName);
  User.countDocuments({ 'userName' : userName }, (err, count) => {
    if (err) {
      return res.status(500).send({message: `Error: ${err}`});
    }
    // Available
    if (count == 0){
      return res.status(200).send();
    } else {
      // Generate and return a new username available
      console.log(generateNewUsernameAvailable('ricardo', 1));
      res.status(400).send({message: 'newUsernameAvailable (Example ricardo1)'});
    }
  })
}

在这种情况下,FindOne比countDocuments/estimatedDocumentCount快。这两个都是承诺,我将添加一个可能的解决方案:

function generateNewUsernameAvailable(userName, number){
  return User
  .findOne({ 'userName' : userName+number })
  .then(function(result){
    if (result){
      return generateNewUsernameAvailable(userName, number+1);
    }else{
      return userName+number;
    }
  })
  .catch(function(err) {
      console.log(`Error: ${err}`);
      throw err;
  });
}

module.exports.existsUserName = function(req,res){
  let userName = req.body.userName;
  console.log('POST existsUserName '+userName);
  User.countDocuments({ 'userName' : userName }, (err, count) => {
    if (err) {
      return res.status(500).send({message: `Error: ${err}`});
    }
    if (count == 0){
      return res.status(200).send();
    } else {
      generateNewUsernameAvailable(userName,1)
      .then(function(results){
        return res.status(400).send({message: results});
      })
      .catch(function(err){
        return res.status(500).send({message: `Error: ${err}`});
      });
    }
  })
}
可能重复的