编写一个函数来适应两种不同的情况?

时间:2015-02-01 18:15:25

标签: javascript node.js function express

也许我的思维不够,但是我可以说我的代码与99%的代码相似,是构建函数最简单的方法吗?

// this is just an express route, not the function I am building
// doPay() is the function I am trying to build properly
function(req,res) {

  if(req.user) {

    // I can use req.user.id in my function
    doPay(req,res);

  } else {

    passport.authenticate('local-signup', function(err, user, info) {

      // instead of req.user.id I would just need user.id
      doPay();

    });

  }

}

doPay()

// My doPay() function, above I need to pass either req.user.id or user.id
// based on the boolean, so how do I adjust this to adapt to that?
gateway.customer.find(req.user.id, function(err, customer) {

  //do payment stuff for an existing user, if the user is new I need to use
  //user.id above

});

1 个答案:

答案 0 :(得分:0)

以下是两种替代设计。

您可以使该功能采用3个参数

function doPay(req, res, user)

然后在该函数中测试以选择可用的内容

var userId;
if (req && req.user && req.user.id) userId = req.user.id;
if (!userId && user && user.id) userId = user.id;
if (!userId) throw "error...";

或者您可以选择将第三个参数设为userId以使用

 function doPay(req,res,userId)

并将userId源逻辑放在路由代码中而不是doPay代码中。 doPay只会使用它被告知使用的userId。我认为这个设计是@Bergi在第一条评论中提出的建议。