Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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
Javascript Node.js模块错误处理_Javascript_Node.js - Fatal编程技术网

Javascript Node.js模块错误处理

Javascript Node.js模块错误处理,javascript,node.js,Javascript,Node.js,上周我一直在努力处理错误,特别是Node.js模块中的错误处理。首先,这是我的代码: user.js路由 user.js模块 每当user.js模块内部出现错误时,调用回调函数,处理user.js路由内部的错误。这是可行的,但我模块中的混乱看起来并不好,因为有太多if-else语句 是否有更好的方法,还是每次都要检查是否有错误?您可以将代码简化为: module.exports.addUser = function(newUser, cb) { User.findOne({ email: n

上周我一直在努力处理错误,特别是Node.js模块中的错误处理。首先,这是我的代码:

user.js路由

user.js模块

每当user.js模块内部出现错误时,调用回调函数,处理user.js路由内部的错误。这是可行的,但我模块中的混乱看起来并不好,因为有太多if-else语句


是否有更好的方法,还是每次都要检查是否有错误?

您可以将代码简化为:

module.exports.addUser = function(newUser, cb) {
  User.findOne({ email: newUser.email }, function(err, user) {
    if(err) {
      cb(err);
      return;
    } 

    if(user) {
      cb(null, user);
      return ;
    } 

    bcrypt.genSalt(10, function(err, salt) {
      if(err) {
        cb(err);
        return;
      } 

      bcrypt.hash(newUser.password, salt, function(err, hash) {
        if(err) {
          cb(err)
          return;
        } 

        newUser.password = hash;

        newUser.save(function(err, newUser) {
          if(err) {
            cb(err);
            return;
          } 

          cb(null, false);
        });
      });
    });
  });
}

然而,如果我是你,正如@scimonester在他的评论中所说的,这是一个典型的用例,它允许您编写更可读的代码,并避免您可以尝试使用承诺来简化错误处理。
module.exports.addUser = function(newUser, cb) {
  User.findOne({ email: newUser.email }, function(err, user) {
    if(err) {
      cb(err);
    } else if(user) {
      cb(null, user);
    } else {
      bcrypt.genSalt(10, function(err, salt) {
        if(err) {
          cb(err);
        } else {
          bcrypt.hash(newUser.password, salt, function(err, hash) {
            if(err) {
              cb(err)
            } else {
              newUser.password = hash;

              newUser.save(function(err, newUser) {
                if(err) {
                  cb(err);
                } else {
                  cb(null, false);
                }
              });
            }
          });
        }
      });
    }
  });
}
module.exports.addUser = function(newUser, cb) {
  User.findOne({ email: newUser.email }, function(err, user) {
    if(err) {
      cb(err);
      return;
    } 

    if(user) {
      cb(null, user);
      return ;
    } 

    bcrypt.genSalt(10, function(err, salt) {
      if(err) {
        cb(err);
        return;
      } 

      bcrypt.hash(newUser.password, salt, function(err, hash) {
        if(err) {
          cb(err)
          return;
        } 

        newUser.password = hash;

        newUser.save(function(err, newUser) {
          if(err) {
            cb(err);
            return;
          } 

          cb(null, false);
        });
      });
    });
  });
}