Tôi đang sử dụng Node.js, Express và Jade và tôi đang cố gắng tìm hiểu cách đăng, xác thực dữ liệu biểu mẫu quy trình &.Node.js, Express và Jade - Biểu mẫu
Trong file ngọc của tôi, tôi tạo ra một hình thức liên lạc:
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
tôi sau đó sử dụng các mô-đun 'bày tỏ-validator' để xác nhận các hình thức như sau:
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
});
}
});
Vì vậy, có ba tình huống trong đó các trang của tôi được hiển thị và mỗi trang có quyền truy cập vào các biến cục bộ khác nhau:
- Khi trang được tải cho lần đầu tiên (lỗi = undefined, success = undefined)
- Khi biểu mẫu được gửi và có lỗi (lỗi = mảng, thành công = không xác định)
- Khi biểu mẫu được gửi và không có lỗi (lỗi = không xác định , thành công = true)
Vì vậy, vấn đề chính của tôi là rằng:
- khi trang Jade tôi được nạp, có vẻ như để ném một lỗi khi tôi cố gắng để truy cập vào một biến mà không tồn tại. Ví dụ, tôi muốn xem nếu biến 'thành công' được thiết lập, và nếu nó là tôi muốn ẩn các hình thức và hiển thị một "cảm ơn" tin nhắn. Có một cách dễ dàng để xử lý một biến trong Jade mà sẽ hoặc là không xác định hoặc một giá trị?
- Khi biểu mẫu đã được gửi và có lỗi xác thực, tôi muốn hiển thị thông báo lỗi (đây không phải là vấn đề) mà còn điền biểu mẫu với các biến được gửi trước đó (ví dụ: nếu người dùng đã cung cấp tên nhưng không có email, lỗi nên tham chiếu đến email trống nhưng biểu mẫu phải giữ lại tên của họ). Tại thời điểm thông báo lỗi được hiển thị nhưng biểu mẫu của tôi được đặt lại. Có cách nào dễ dàng để đặt giá trị đầu vào của các trường thành các giá trị trong dữ liệu bài đăng không?
Xin cảm ơn phản hồi. Tuy nhiên, không phải mã của bạn '-var form_model = {} || 'luôn luôn đặt' form_model = {} ', như' {} 'là một đối tượng (không phải không xác định) và do đó' locals.form_data' sẽ không bao giờ được đánh giá? Nếu tôi thay đổi mã thành -'var form_model = locals.form_data || {} 'Tôi vẫn nhận được một lỗi, như trình biên dịch nói rằng' form_data' không tồn tại. Tôi không hiểu điều này, vì điều này sẽ làm việc với Javascript bình thường. Liên quan đến điểm 2 Tôi đã thực hiện ý tưởng của bạn về việc truyền dữ liệu qua lại cho khung nhìn, trong trường hợp của tôi, tôi chuyển 'req.form' –
woops, bạn đúng form_model luôn {} trong mã của tôi. Tôi sẽ cập nhật nó. Tôi cũng chỉ nhận thấy nó thực sự nên là locals.form_model. – Pickels