Skip to content

Instantly share code, notes, and snippets.

@frank06
Created August 23, 2010 08:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save frank06/545092 to your computer and use it in GitHub Desktop.
Save frank06/545092 to your computer and use it in GitHub Desktop.
var forms_lib = require('forms')
module.exports = function(forms) {
forms = forms || {};
return function(req, res, next) {
if (!req.session) {
next(new Error("Forms middleware requires connect.session middleware to work properly"));
return;
}
req.forms = {
get: function(name) {
var temp = req.session.forms && req.session.forms[name]
if (temp) {
delete req.session.forms[name]
return temp
}
else return forms_lib.create(clone(forms[name]))
},
update: function(name, form) {
req.session.forms = req.session.forms || {}
req.session.forms[name] = form
}
}
next();
}
}
function clone(o) {
if(typeof(o) != 'object') return o;
if(o == null) return o;
var newO = new Object();
for(var i in o) newO[i] = clone(o[i]);
return newO;
}
var _ = module.exports = express.createServer(
connect.cookieDecoder(),
connect.session(),
require('./middleware/forms')({
invite: {
email: fields.email({required: true})
}
})
)
_.get('/', function(req, res) {
res.render('index', { locals: { form: req.forms.get('invite').toHTML() } })
})
_.post('/invite', function(req, res) {
req.forms.get('invite').handle(req, {
success: function(form) {
var email = form.data.email
db.save('invites', email, { email: email, date: +new Date })()
req.flash('info', "Thanks for your interest, " + email + "!")
res.redirect('/')
},
other: function(form) {
req.forms.update('invite', form)
res.redirect('/')
}
})
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment