2012-08-10 15 views
5

मैं नोड.जेएस, एक्सप्रेस और जेड का उपयोग कर रहा हूं और मैं यह जानने का प्रयास कर रहा हूं कि पोस्ट कैसे करें, प्रक्रिया फॉर्म डेटा को मान्य करें।नोड.जेएस, एक्सप्रेस और जेड - फॉर्म

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

तो देखते हैं

मेरी जेड फ़ाइल में मैं एक संपर्क फार्म बनाने तीन परिदृश्य जहां मेरे पृष्ठ प्रस्तुत किए जाते हैं, और प्रत्येक के पास अलग-अलग स्थानीय चरों तक पहुंच होती है:

  1. जब पृष्ठ लोड किया जाता है पहली बार (त्रुटियों = अपरिभाषित, सफलता = अपरिभाषित)
  2. फ़ॉर्म सबमिट किया जाता है और वहाँ त्रुटियों (त्रुटियों = सरणी, सफलता = अपरिभाषित)
  3. फ़ॉर्म सबमिट किया जाता है और कोई त्रुटि (त्रुटियाँ हैं जब = अपरिभाषित कर रहे हैं

    1. जब मेरे जेड पृष्ठ लोड होने पर यह जब मैं एक चर जो मौजूद नहीं है का उपयोग करने का प्रयास एक त्रुटि फेंक लगता है:, सफलता = true)

    तो मेरी मुख्य समस्या यह है कि कर रहे हैं। उदाहरण के लिए, मैं देखना चाहता हूं कि चर 'सफलता' सेट है या नहीं, और यदि यह है कि मैं फॉर्म को छिपाना चाहता हूं और "धन्यवाद" संदेश प्रदर्शित करना चाहता हूं। क्या जेड में एक चर को संभालने का कोई आसान तरीका है जो या तो अपरिभाषित या मूल्य होगा?

  4. जब फॉर्म सबमिट किया गया है और सत्यापन त्रुटियां हैं, तो मैं एक त्रुटि संदेश दिखाना चाहता हूं (यह कोई समस्या नहीं है) लेकिन पहले सबमिट किए गए चर के साथ फ़ॉर्म को भी पॉप्युलेट करें (उदाहरण के लिए यदि उपयोगकर्ता ने नाम दिया है लेकिन कोई ईमेल नहीं, त्रुटि को रिक्त ईमेल का संदर्भ देना चाहिए लेकिन फ़ॉर्म को अपना नाम रखना चाहिए)। फिलहाल त्रुटि संदेश प्रदर्शित होता है लेकिन मेरा फॉर्म रीसेट हो जाता है। क्या पोस्ट डेटा में मानों के फ़ील्ड के इनपुट मान सेट करने का कोई आसान तरीका है?

उत्तर

1
  1. आप ठीक कर सकते हैं कि बजाय locals.variable का उपयोग कर बस चर द्वारा। इसके अलावा आप जेड में जावास्क्रिप्ट का उपयोग कर सकते हैं।

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

  2. मैंने इस समस्या को हल करने के दो तरीकों का उपयोग किया। पहला व्यक्ति दृश्य को फिर से प्रस्तुत करना है और आप req.body को स्थानीय के रूप में पास करते हैं। मेरे पास एक सम्मेलन है कि मेरे फॉर्म उनके फ़ील्ड मानों के लिए form_model.value का उपयोग करते हैं। यह विधि सरल रूपों के लिए अच्छी तरह से काम करती है लेकिन जब आप डेटा पर भरोसा करते हैं तो यह थोड़ा सा टूटना शुरू हो जाता है।

    दूसरी विधि है कि आप अपने req.body को सत्र में पास कर दें, फिर फ़ॉर्म को प्रस्तुत करने वाले रूट पर रीडायरेक्ट करें। उस मार्ग को एक निश्चित सत्र चर की तलाश है और अपने रूप में उन मानों का उपयोग करें।

+0

प्रतिक्रिया के लिए हाय धन्यवाद। हालांकि, आपका कोड '-var form_model = {} || नहीं होगा locals.form_data; 'हमेशा 'form_model = {}' सेट करें, '{}' एक वस्तु है (अपरिभाषित नहीं है) और इसलिए 'locals.form_data' का मूल्यांकन कभी नहीं किया जाएगा? यदि मैं कोड को -vvar form_model = locals.form_data || में बदलता हूं {} 'मुझे अभी भी एक त्रुटि मिलती है, क्योंकि संकलक कहता है कि' form_data' मौजूद नहीं है। मुझे यह समझ में नहीं आता है, क्योंकि यह सामान्य जावास्क्रिप्ट के साथ काम करना चाहिए। बिंदु 2 के संबंध में मैंने डेटा को वापस देखने के अपने विचार को लागू किया है, मेरे मामले में मैं 'req पास करता हूं।फॉर्म ' –

+0

woops, आप मेरे कोड में सही फॉर्म_मोडेल हमेशा {} हैं। मैं इसे अपडेट करूंगा। मैंने यह भी देखा कि यह वास्तव में locals.form_model होना चाहिए। – Pickels

संबंधित मुद्दे