के साथ सर्वोत्तम प्रथाओं का प्रसंस्करण प्रपत्र मैं एक ऐसी वेबसाइट लिख रहा हूं जो एक उपयोगकर्ता प्रबंधन प्रणाली लागू करता है और मुझे आश्चर्य है कि प्रपत्र प्रसंस्करण के संबंध में सर्वोत्तम प्रथाओं पर मुझे क्या विचार करना है।एक्सप्रेस
विशेष रूप से प्रदर्शन, सुरक्षा, एसईओ और उपयोगकर्ता अनुभव मेरे लिए महत्वपूर्ण हैं। जब मैं इस पर काम कर रहा था तो मैं कुछ प्रश्नों में आया और मुझे एक पूर्ण नोड/एक्सप्रेस कोड स्निपेट नहीं मिला जहां मैं अपने सभी सवालों के बारे में पता लगा सकता था।
केस का उपयोग करें: कोई भी अपनी प्रोफ़ाइल के जन्मदिन को अपडेट करने जा रहा है। अभी मैं उसी पृष्ठ पर फ़ॉर्म को संसाधित करने के लिए एक ही यूआरएल के लिए एक POST अनुरोध कर रहा हूं और POST अनुरोध उसी यूआरएल पर 302 रीडायरेक्ट के साथ जवाब देगा।
प्रपत्र प्रसंस्करण के बारे में सामान्य प्रश्न:
- मैं एक पोस्ट अनुरोध + 302 करना चाहिए प्रपत्र प्रसंस्करण या बल्कि एक AJAX अनुरोध की तरह कुछ और के लिए पुनर्निर्देशित?
- मुझे अमान्य FORM अनुरोधों को कैसे प्रबंधित करना चाहिए (उदाहरण के लिए अमान्य लॉगिन, या ईमेल पता पहले ही साइनअप के दौरान उपयोग में है)? प्रपत्र प्रसंस्करण के बारे में
एक्सप्रेस विशिष्ट प्रश्न:
मेरी DB में कुछ भी डालने से पहले मैं स्वच्छ और सर्वर साइड पर सभी फ़ॉर्म फ़ील्ड को मान्य करने की जरूरत है मुझे लगता है । आप वह कैसे करेंगें?
मैंने सीएसआरएफ के बारे में कुछ चीजें पढ़ी लेकिन मैंने कभी सीएसआरएफ सुरक्षा लागू नहीं की है। मुझे यह देखने में खुशी होगी कि कोड स्निपेट में भी
क्या मुझे एक्सप्रेस के साथ फ़ॉर्म प्रोसेस करते समय किसी अन्य संभावित भेद्यता का ख्याल रखने की आवश्यकता है?
उदाहरण HTML/पग:
form#profile(method='POST', action='/settings/profile')
input#profile-real-name.validate(type='text', name='profileRealName', value=profile.name)
label(for='profile-real-name') Name
textarea#profile-bio.materialize-textarea(placeholder='Tell a little about yourself', name='profileBio')
| #{profile.bio}
label(for='profile-bio') About
input#profile-url.validate(type='url', name='profileUrl', value=profile.bio)
label(for='profile-url') URL
input#profile-location.validate(type='text', name='profileLocation', value=profile.location)
label(for='profile-location') Location
.form-action-buttons.right-align
a.btn.grey(href='' onclick='resetForm()') Reset
button.btn.waves-effect.waves-light(type='submit')
उदाहरण मार्ग हैंडलर:
router.get('/settings/profile', isLoggedIn, profile)
router.post('/settings/profile', isLoggedIn, updateProfile)
function profile(req, res) {
res.render('user/profile', { title: 'Profile', profile: req.user.profile })
}
function updateProfile(req, res) {
var userId = req.user._id
var form = req.body
var profile = {
name: form.profileRealName,
bio: form.profileBio,
url: form.profileUrl,
location: form.profileLocation
}
// Insert into DB
}
नोट: एक संपूर्ण कोड स्निपेट जो सबसे अच्छा प्रसंस्करण सभी प्रपत्र का ख्याल रखता है दिए गए उदाहरण के लिए अनुकूलित प्रथाओं की अत्यधिक सराहना की जाती है। मैं सार्वजनिक रूप से उपलब्ध एक्सप्रेस मिडलवेयर का उपयोग करने के साथ ठीक हूं।
समय लेने के लिए धन्यवाद, क्या आप एक असली दुनिया कोड उदाहरण दिखाते हैं जो दर्शाता है कि आप कैसे एक फॉर्म को स्वच्छ और वैध कर रहे हैं? इससे मुझे आपके दृष्टिकोण को समझने में मदद मिलेगी। यदि आप सोचते हैं तो मैं मोंगोज़ का उपयोग कर रहा हूं। – kentor
मैं मोंगोज़ को बहुत पसंद करता हूं, इसलिए माफ करना नहीं। –