也许我的思维不够,但是我可以说我的代码与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
});
答案 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在第一条评论中提出的建议。