I use Node.js, Express and Jade, and I'm trying to figure out how to publish, validate and process form data.
In my jade file I create a contact form:
div
form(method='post',action='')
label(for='name') Name:
input(type='text',name='name',id='name')
label(for='email') Email:
input(type='text',name='email',id='email')
input(type='submit',name='submit',value='Submit').submit-button
Then I use the express validator module to validate the form as follows:
var express = require('express')
,routes = require('./routes')
,http = require('http')
,path = require('path')
,expressValidator = require('express-validator')
;
var app = express.createServer();
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(expressValidator);
app.use(express.methodOverride());
app.use(app.router);
});
app.get('/mypage', function(req,res){
res.render('mypage', {
title: 'My Page'
});
});
app.post('/mypage', function(req,res){
req.assert('name', 'Please enter a name').notEmpty();
req.assert('email', 'Please enter a valid email').len(6,64).isEmail();
var errors = req.validationErrors();
if( !errors){
sendEmail(function(){
res.render('mypage', {
title: 'My Page',
success: true
});
});
}
else {
res.render('mypage', {
title: 'My Page',
errors: errors
});
}
});
Thus, there are three scenarios where my pages are displayed, and each of them has access to various local variables:
- When the page loads for the first time (errors = undefined, success = undefined)
- When the form is submitted and errors appear (errors = array, success = undefined)
- When the form is submitted and there are no errors (errors = undefined, success = true)
So, my main problems are as follows:
- Jade , , , , , . , , "success", "". Jade, undefined, ?
- , , ( ), , (, , , ). , reset. ?