5
我正在使用Node.js,Express和Jade,我試圖弄清楚如何發佈,驗證&流程表單數據。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
然後我利用模塊「表達驗證器」驗證形式如下:
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 = array,success = undefined)
- 當表單提交併且沒有錯誤時(errors = undefined ,成功= TRUE)
所以我的主要問題是:
- 當我的玉加載頁面時,它似乎當我試圖訪問一個不存在的變量來拋出一個錯誤。例如,我想查看是否設置了變量'success',如果是,我想隱藏表單並顯示「謝謝」消息。有沒有一種簡單的方法來處理Jade中的變量,它可以是未定義的或者是值?
- 當表單被提交併且存在驗證錯誤時,我想要顯示一條錯誤消息(這不是問題),但是也會使用先前提交的變量填充表單(例如,如果用戶提供了一個名稱但沒有電子郵件,錯誤應該引用空白的電子郵件,但表格應保留其姓名)。此刻顯示錯誤消息,但我的表單已重置。有沒有簡單的方法將字段的輸入值設置爲發佈數據中的值?
嗨,感謝您的回覆。但是,你的代碼不會'-var form_model = {} || locals.form_data;'始終設置'form_model = {}',因爲'{}'是一個對象(不是未定義的),因此'locals.form_data'永遠不會被評估?如果我將代碼更改爲-'var form_model = locals.form_data || {}'我仍然遇到錯誤,因爲編譯器說'form_data'不存在。我不明白這一點,因爲這應該與普通的Javascript一起工作。關於第2點,我已經實現了將數據傳遞迴視圖的想法,在我的情況下,我傳遞了'req。表單' – 2012-08-13 01:13:31
woops,你是對的form_model總是{}在我的代碼中。我會更新它。我也只是注意到它實際上應該是locals.form_model。 – Pickels 2012-08-13 11:18:08