Is the following the correct way to go about things? This is a sign up controller action. Im creating a user and a group to add the user to. Notice I have method level variables called user and group. The rest of the code is asynchronous using the Q module.
Is it ok to have the method level variables or will they be overriden by the another person signing up at the same time?
exports.postSignUp = function(req, res, next) {
var user,
group;
return Q.invoke(exports, 'parseUser', req, null)
.then(function(u)
{
user = u;
return Q.invoke(exports, 'postCreateUser', user).fail(function(err) { throw err; });
})
.then(function()
{
group = new Group();
group.userIds = [user._id];
return Q.invoke(exports, 'postCreateGroup', group).fail(function(err) { throw err; });
})
.then(function()
{
user.groupId = group._id;
group.userIds = [ user._id ];
})
.then(function()
{
return Q.ninvoke(req, 'login', user).fail(function(err) { throw err; });
})
.then(function()
{
return res.redirect('/tour');
})
.fail(function (err)
{
console.log('u:' + user);
console.log('g:' + group);
return exports.createValidationError(error, req, res, user);
});
};
No, they won't as they are locally scoped to your
postSignUp
function.It is however a little ugly, nesting them might be the better choice here:
You have one async function currently, you might want to break that down into creating a user with a new group, and logging him in plus redirecting him to
/tour
.