2012-08-10 31 views
5

Node.js, Express ve Jade kullanıyorum ve nasıl postalanacağını anlamaya çalışıyorum, & işlem formu verilerini doğrula.Node.js, Express ve Jade - Formlar

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 

Sonra modülü 'ifade-doğrulayıcı' şöyle formu doğrulamak için kullanan ediyorum:

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 
     }); 
    } 
}); 

Yani orada benim yeşim dosyasında

Ben bir iletişim formu oluşturmak Sayfalarımın oluşturulduğu üç farklı senaryo ve her birinin farklı yerel değişkenlere erişimi var:

  1. Sayfa yüklenirken İlk kez (tanımlanmamış hataları = Tanımsız başarı =)
  2. form gönderildiğinde ve (hatalar = dizi, başarılı = tanımlanmamış)
  3. form gönderildiğinde ve hiç hata (hata vardır = tanımlanmamış hataları vardır edildiğinde benim Jade sayfa yüklendiğinde

    1. , ben var olmayan bir değişkene erişmeye çalıştığınızda bir hata atmak gibi görünüyor: başarı = true)

    Yani benim ana sorunlar vardır. Örneğin, 'başarı' değişkeninin ayarlanmış olup olmadığını görmek istiyorum ve eğer formu gizlemek ve bir "teşekkür" mesajı görüntülemek istiyorum. Jade'de tanımlanamayan bir değer veya bir değerle başa çıkmak için kolay bir yol var mı?

  4. Form gönderildiğinde ve doğrulama hataları olduğunda, bir hata iletisi (bu sorun değil) göstermek istiyorum, ancak formu daha önce gönderilen değişkenlerle doldurun (örneğin, kullanıcı bir ad sağladıysa) ama e-posta yok, hata boş e-postaya başvuruda bulunmalı, ancak form isimlerini muhafaza etmelidir). Şu anda hata mesajı görüntüleniyor ama formum sıfırlandı. Alanların giriş değerlerini posta verisindeki değerlere göre ayarlamanın kolay bir yolu var mı?

cevap

1
  1. Düzeltmeniz ki locals.variable kullanarak yerine sadece değişken tarafından. Ayrıca jade'de javascript'i kullanabilirsiniz.

    -locals.form_model = locals.form_data || {};

  2. Bu sorunu çözmek için iki yöntem kullandım. Birincisi, görünümü yeniden oluşturmak ve req.body'yi yerel olarak geçirmektir. Formlarımın alan değerleri için form_model.value kullandığına dair bir sözleşmem var. Bu yöntem, basit formlar için iyi çalışır ancak form verdiğinizde veriye güvenirken biraz bozulmaya başlar.

    İkinci yöntem, req.body'nizi oturuma iletmek ve formu oluşturan bir yola yönlendirmektir. Bu rotaya belirli bir oturum değişkenini arıyorum ve bu değerleri formunuzda kullanın.

+0

Cevabınız için teşekkürler. Ancak kodunuz olmazdı -var form_model = {} || locals.form_data; 'her zaman form_model = {}', '{}' bir nesne (undefined değil) olarak ayarlanır ve bu nedenle 'locals.form_data' hiçbir zaman değerlendirmeye alınmaz mı? Eğer kodu -'var olarak değiştirirsem form_model = locals.form_data || Derleyici bir "form_data" nın mevcut olmadığını söylediğinden, {} hala hata alıyorum. Bunu anlamıyorum, çünkü bu normal Javascript ile çalışmalıdır. 2. nokta ile ilgili olarak, veriyi geri iletme fikrinizi uygulamaya geri döndürdüm, benim durumumda da 'req.form –

+0

woops, siz doğru form_model kodumda her zaman {}. Onu güncelleyeceğim. Ayrıca, sadece locals.form_model olması gerektiğini fark ettim. – Pickels

İlgili konular