节点 js 错误传播到调用方



>我有一个带有实例函数的类

文件1.js

export default class User {
constructor() {
this.userSchema = new Schema({
  username: String,
  password: String,
});
this.usermodel = Mongo.getModel('user', this.userSchema);
}
signUp({username, password}) {
var user = new this.usermodel({username: username,password: password});
this.usermodel.findOne({username: username}).exec((err, userresult) => {
  if (err) {
    /////////////// **LOCATION 1**: throw error that can be 
  } else {
    if(userresult) { // one user case so
      /////**LOCATION 2**: throw new Error("User with this Username already exists !. Please try a new Username.");
    } else { // null case
      return new DbResult({});
    }
  }
})
}
}

另一个文件文件2,我从中调用文件1的注册。

文件2.js

const user = new User();
try {
  user.signUp({username: request.body.username, password: request.body.password});
  console.log("reached means it is synchronous");
  response.status(200).json({'successmessage' : 'Successfully Signed Up'});
} catch (e) {
  response.status(400).json({'errormessage': e.message});
}

我想在位置 1 和 2 的 file1.js 中抛出错误,我想在 file2.js(从调用它的地方(中捕获它,然后处理它。

有人可以帮忙怎么做吗?我对 nodejs 很陌生。

我读到了一个事实,即我们不能像那样在回调中抛出错误,因为它是一个回调,它只会使代码崩溃。我接下来也读到了这个,但我认为我没有正确理解它,所以不知道实际上该通过哪里。如果有人解释并帮助我以正确的方式解决这个问题,那就太好了.

如何用承诺做到这一点的例子:

export default class User {
  constructor() {
    this.userSchema = new Schema({
      username: String,
      password: String,
    });
    this.usermodel = Mongo.getModel('user', this.userSchema);
  }
  signUp({username, password}) {
    var me = this;
    return new Promise(
      function(resolve,reject) {
        var user = new me.usermodel({username: username,password: password});
        me.usermodel.findOne({username: username}).exec((err, userresult) => {
          if (err) {
            reject(err);
          } else {
            if(userresult) { // one user case so
              reject(new Error(
                "User with me Username already exists !. Please try a new Username."
              ));
            } else { // null case
              resolve(new DbResult({}));
            }
          }
        })    
      }
    )
  }  
}
const user = new User();
user.signUp({username: request.body.username, password: request.body.password})
.then(//success
  function(result){
    //do something with result
    response.status(200).json({'successmessage' : 'Successfully Signed Up'});
  }
)
.then(//fail
  undefined //no success handler
  ,function(err){
    //do something with error
    response.status(400).json({'errormessage': e.message});
  }
);

最新更新