Skip to content

Instantly share code, notes, and snippets.

@impactmass
Last active May 29, 2017 09:51
Show Gist options
  • Save impactmass/5ed1a4e9d2bbf82cfb718b366482be81 to your computer and use it in GitHub Desktop.
Save impactmass/5ed1a4e9d2bbf82cfb718b366482be81 to your computer and use it in GitHub Desktop.
Beginner: Use of descriptive functions + promise chain
const UserController = {
create(req, res) {
const userData = req.body;
const query = {
where: { email: userData.email }
};
const defaultRole = {
where: { title: 'Writer' }
};
Users.findOne(query)
.then(checkReturnedUser)
.then(getDefaultRoleInfo)
.then(createUser)
.then(generateToken)
.then(resHandler)
.catch(errorHandler);
function checkReturnedUser(user) {
if (user) {
throw new Error('checkReturnedUSer');
}
return user;
}
function getDefaultRoleInfo() {
return Roles.findOne(defaultRole);
}
function createUser(role) {
return Users.create(Object.assign({}, userData, { roleId: role.id }));
}
function generateToken(newUserObj) {
const payload = { roleId: newUserObj.roleId, email: newUserObj.email };
return {
newUser: newUserObj,
token: jwt.sign(payload, config.jwtSecret, { expiresIn: '24h' })
};
}
function resHandler(resObj) {
return res.status(201).send(Object.assign({}, resObj, {
message: 'User signup completed successfully'
}));
}
function errorHandler(error) {
const message = error.message;
if (message === 'checkReturnedUSer') {
return res.status(400).send({
error: 'An account with that email address already exists'
});
}
return res.status(500).send({ error });
}
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment