我使用 Node.js 和 Expressjs 进行服务器端编码,使用 MongoDB 作为后端。我对所有这些技术都是新手。我需要根据请求执行操作列表。
例如在用户管理中
- 检查用户是否已经注册
- 如果已注册,请重新发送激活电子邮件
- 如果未注册,则从另一个表中获取 userId,该表将维护用户、资产等的 id。[我知道 MongoDB 提供唯一的 _id;但我需要有一个唯一的整数 id 作为 userId]
- 创建用户
- 发送成功或失败响应。
为了实现这一点,我编写了以下代码:
exports.register = function(req,res,state,_this,callback) {
switch(state) {
case 1: //check user already registered or not
_this.checkUser(req, res, ( state + 1 ), _this, _this.register, callback);
break;
case 2: //Already registered user so resend the activation email
_this.resendEmail(req, res, 200, _this, _this.register, callback);
break;
case 3: //not registered user so get the userId from another table that will maintain the ids for user,assets etc
_this.getSysIds(req, res, ( state + 2 ), _this, _this.register, callback);
break;
case 4: //create the entry in user table
_this.createUser(req, res, ( state + 1 ), _this, _this.register, callback);
break;
case 200: //Create Success Response
callback(true);
break;
case 101://Error
callback(false);
break;
default:
callback(false);
break;
}
};
检查用户代码是这样的
exports.checkUser = function(req,res,state,_this,next,callback) {
//check user already registered or not
if(user) {//Already registered user so resend the activation email
next(req,res,state,_this,callback);
}
else {//not registered user so get the userId
next(req,res,(state + 1),_this,callback);
}
}
和类似的其他功能。
对注册函数的第一次调用将从 app.get 执行为
user.register(req,res,1,this,function(status) {
//do somthing
});
有没有更好的方法来做到这一点?我面临的问题是基于某些条件,我必须遵循一系列行动。我可以在嵌套的回调结构中编写所有这些,但在这种情况下,我无法重用我的代码。
我的老板告诉我的一个问题是,在代码中我调用了函数寄存器并将其放入一个回调堆栈中
状态 1:切库斯
状态 3:getIds
状态4:创建用户
最后在状态 200 中,我刚刚从堆栈中退出?可能会导致堆栈溢出!
有没有更好的方法来处理 Node.js/Expressjs 中的回调?
注意:以上是示例代码。我有很多不同的情况。