MEAN Stack应用程序 - 发送后无法设置标题

MEAN Stack应用程序 - 发送后无法设置标题

问题描述:

我基本上试图用MEAN创建一个注册页面,我想检查数据库(使用Mongoose的Mongo),如果用户和电子邮件已经存在,if其中一个是真的,发送res.json失败。MEAN Stack应用程序 - 发送后无法设置标题

如果用户名和电子邮件尚未在数据库中,请继续添加该用户。

我收到一条错误消息“发送后无法设置标题”。在节点控制台上,我试图找出原因。

一旦User.getUsername()在回调中返回一个用户(如果用户名传递存在于数据库中),它不应该返回json并在那里结束请求吗?为什么它继续User.adduser()函数并尝试在那里设置标题?

任何帮助表示赞赏,谢谢。

router.post('/register', (req, res, next) =>{ 
    let newUser = new User({ // Collect body info 
     name: req.body.name, 
     email: req.body.email, 
     username: req.body.username, 
     password: req.body.password 
    }); 

    // Check if username is available 
    User.getUserByUsername(newUser.username, (err, user) => { 
     if(err) throw err; 
     if(user){ 
      return res.json({success: false, msg: 'User already exists'}); 
      // I want to end here if there's a user 
     } 
    }); 

    //Continue to add user if getUserByUsername() returns false for user 

    // Add user 
    User.addUser(newUser, (err, user) => { // Add user 
     if(err){ 
      return res.json({success: false, msg: 'Failed to register'}); 
     } else { 
      return res.json({success: true, msg: 'You have been successfully registered!'}); 
     } 
    }); 

}); 

由于异步方法的工作原理,您拥有的逻辑无法按预期工作。目前的逻辑是做User.getUserByUsername然后做User.addUser,如果任一方法回调,处理它。我很确定你想要,做User.getUserByUsername,等待它的回调,如果有必要请致电User.addUser。这是一个粗略的实现,你可以使用promise或者定义逻辑外的方法来清理它。另外,确保你在代码中的某个时刻调用res.end()。

router.post('/register', (req, res, next) =>{ 
    let newUser = new User({ // Collect body info 
     name: req.body.name, 
     email: req.body.email, 
     username: req.body.username, 
     password: req.body.password 
    }); 

    // Check if username is available 
    User.getUserByUsername(newUser.username, (err, user) => { 
     if(err) throw err; 
     if(user){ 
      return res.json({success: false, msg: 'User already exists'}); 
      // I want to end here if there's a user 
     }else{ 
      //Continue to add user if getUserByUsername() returns false for user 

      // Add user 
      User.addUser(newUser, (err, user) => { // Add user 
       if(err){ 
        return res.json({success: false, msg: 'Failed to register'}); 
       } else { 
        return res.json({success: true, msg: 'You have been successfully registered!'}); 
       } 
      }); 
     } 
    }); 
}); 
+0

非常感谢!是的,这是我想如何实现它。但是,我认为一旦我添加checKIfEmailExists()方法也会非常麻烦。我现在有它的工作,它检查用户名的唯一性,在回调中,它检查电子邮件和检查电子邮件回调中,如果用户名和电子邮件都很好,它会添加用户。它的工作原理非常混乱,不可读 – Berimbolo