在内部调用需要请求和响应的函数

时间:2015-07-29 07:22:07

标签: node.js

我写了一个添加用户的函数:

exports.add = function(req, res) {
  UserRoles.create(req.body, function (err, musician) {
    if (err) return console.log(err);
  });
}

我理解它应该从客户端/ UI调用,因为它需要请求和响应。

然而,现在,需要能够在内部调用它。也就是说,当用户注册自己时,最终用户只需要添加到数据库中,所以我认为我应该在注册码中调用此函数以避免重写代码。

看起来像这样:

register: function(req, res, next) {
        try {
            User.validate(req.body);
        }
        catch(err) {
            return res.send(400, err.message);
        }

        User.add(/*what do I pass in here */ function(err, user) { --POINT OF PROBLEM
            if(err === 'UserAlreadyExists') return res.send(403, "User already exists");
            else if(err)                    return res.send(500);

            req.logIn(user, function(err) {
                if(err)     { next(err); }
                else        { res.json(200, { "role": user.role, "username": user.username }); }
            });
        });
    }

如何避免在此处重写代码以进行添加?有没有办法可以在register内调用它?如果没有,我可以得到一些关于这样做的指示吗?我是一个完整的新手,对此知之甚少,所以我会请求建议方法的解释,以便我理解一种方法的优点和缺点。

1 个答案:

答案 0 :(得分:1)

我建议只需传入数据对象即可将User.add()req/res分离:

exports.add = function(user, callback) {
  UserRoles.create(user, callback);
  // This is short for:
  // UserRoles.create(user, function(err, musician) {
  //   if (err) return callback(err);
  //   return callback(null, musician);
  // });
};

你会这样称呼它:

User.add(req.body, function(err, user) {
  ...
});