Node.js中验证过程中的异步调用链

Node.js中验证过程中的异步调用链,node.js,passport.js,sequelize.js,bcrypt,Node.js,Passport.js,Sequelize.js,Bcrypt,这个问题可能是一个自我放纵的代码审查请求,但我不习惯异步编程,在继续之前需要一些验证 我目前正在node.js中运行一个非常简单的web应用程序,它在登录过程中使用一系列中间件来验证新资源 特别令人感兴趣的是作为过程最后一步的控制器方法。如果到目前为止请求已经通过了所有验证,那么它仍然需要通过最后一个验证。它检查dabatase中是否存在具有类似电子邮件的用户(正在使用的ORM是Sequelize),然后将其保存到数据库中(如果是这种情况) 现在,我使用bcrypt作为保存密码之前散列密码的一种

这个问题可能是一个自我放纵的代码审查请求,但我不习惯异步编程,在继续之前需要一些验证

我目前正在node.js中运行一个非常简单的web应用程序,它在登录过程中使用一系列中间件来验证新资源

特别令人感兴趣的是作为过程最后一步的控制器方法。如果到目前为止请求已经通过了所有验证,那么它仍然需要通过最后一个验证。它检查dabatase中是否存在具有类似电子邮件的用户(正在使用的ORM是Sequelize),然后将其保存到数据库中(如果是这种情况)

现在,我使用bcrypt作为保存密码之前散列密码的一种方法,但这会给这个过程增加一层复杂性。Bcrypt异步运行,调用的两个orm方法也是如此,这导致我们出现以下块:

function(req, res) {
var = newuser = {
   email: req.body.email,
   password: req.body.password,
   display_name: req.body.display_name
};
bcrypt.hash(newuser.password, null, null, function (err, res) {
   if (err) {
      res.redirect('/auth/signup');
   }
   newuser.password = res;
   models.user.findOne({where: {email: newuser.email}}).then(user => {
      if (!user) {
         res.redirect('/auth/signup');
      }
      models.user.create(newuser).then(user => {
         if (!user) {
            res.redirect('auth/signup');
         }
         res.redirect('/auth/signin');
         }
      }
   }
}

我的问题是:我在这里是否完全偏离了基准,是否有一种更优雅的方法来执行相同的常规功能,而不必1)对每个失败案例重复重定向,2)看起来非常丑陋?

请检查节点()的
异步
模块并阅读其文档()。这应该正是你要找的东西,它看起来确实和我想要的一模一样,谢谢。