我正在使用 Node.js、Express 和 Jade,我正在尝试弄清楚如何发布、验证和处理表单数据。
在我的玉文件中,我创建了一个联系表:
div#contact-area
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
然后我使用模块“express-validator”来验证表单,如下所示:
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'); //not needed if we provide explicit file extension on template references e.g. res.render('index.jade');
app.use(express.bodyParser());
app.use(expressValidator);
app.use(express.methodOverride());
app.use(app.router);
});
//display the page for the first time
app.get('/mypage', function(req,res){
res.render('mypage', {
title: 'My Page'
});
});
//handle form submission
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
});
}
});
因此,我的页面呈现三种情况,并且每种情况都可以访问不同的局部变量:
- 第一次加载页面时(errors=undefined,success=undefined)
- 表单提交时出现错误(errors=array,success=undefined)
- 当表单提交并且没有错误时(errors=undefined,success=true)
所以我的主要问题是:
- 当我的 Jade 页面加载时,当我尝试访问一个不存在的变量时似乎会抛出一个错误。例如,我想查看是否设置了变量“成功”,如果是,我想隐藏表单并显示“谢谢”消息。有没有一种简单的方法来处理 Jade 中未定义或值的变量?
- 当表单已提交并且存在验证错误时,我想显示一条错误消息(这不是问题),但还要使用先前提交的变量填充表单(例如,如果用户提供了名称但没有电子邮件,错误应引用空白电子邮件,但表单应保留其名称)。目前显示错误消息,但我的表单已重置。有没有一种简单的方法可以将字段的输入值设置为发布数据中的值?