router.js
const router = require('express').Router();
const User = require('./lib/user');
router.post('/api/users',
User.validateUser,
User.addUser,
User.sendValidationEmail,
User.authenticateUser,
function(req, res, next) {
res.status(204).end();
}
);
lib / user.js
const co = require('co');
const q = require('q');
const passport = require('passport');
/* your own implementations come here */
const userMongooseModel = require('./db/userMongooseModel');
const email = require('./lib/email');
const validateUser = function(req, res, next) {
co(function*() {
if (!req.body.email) {
return next(new Error('E-mail required'));
}
delete req.body.forbiddenkey;
next();
}).catch(function(error) {
next(error);
});
}
const addUser = function(req, res, next) {
co(function*() {
let user = yield userMongooseModel.create(req.body);
// if your mongoose schema creates it, for the validation
req.body.token = user.token;
next();
}).catch(function(error) {
next(error);
});
}
const sendValidationEmail = function(req, res, next) {
co(function*() {
yield email.sendActivationEmail(req.body.email, req.body.name, req.body.token);
next();
}).catch(function(error) {
next(error);
});
}
const authenticateUser = function(req, res, next) {
passport.authenticate('local')(req, res, function () {
req.session.save(function (error) {
if (error) {
return next(err);
}
next();
});
});
}
module.exports = {
validateUser: validateUser,
addUser: addUser,
sendValidationEmail: sendValidationEmail,
authenticateUser: authenticateUser
}