जेड - टेम्प्लेट इंजन: वेरिएबल मौजूद है या नहीं, इसकी जांच कैसे करें


80

मैं वर्तमान में एक नए प्रोजेक्ट पर जेड का उपयोग कर रहा हूं। मैं एक पृष्ठ रेंडर करना चाहता हूं और जांचता हूं कि क्या एक निश्चित चर उपलब्ध है।

app.js:

app.get('/register', function(req, res){
    res.render('register', {
        locals: {
          title: 'Register',
          text: 'Register as a user.',
        }
      });
});

register.jade:

- if (username)
p= username
- else
p No Username!

मुझे हमेशा निम्न त्रुटि मिलती है:

username is not defined

मैं इसे कैसे ठीक कर सकता हूं इस पर कोई विचार?


1
अब (2014) लगता है, हमें अब यह त्रुटि नहीं मिली है। उपयोग करने के लिए बहुत आसान है।
gfaceless 13

जवाबों:


105

यह काम करना चाहिए:

- if (typeof(username) !== 'undefined'){
  //-do something
-}

- अगर (isset (उपयोगकर्ता नाम)) 'isset परिभाषित नहीं है
mbecker

2
क्षमा करें, मैं PHP और जावास्क्रिप्ट के साथ भ्रमित हो गया। मेरे उत्तर को अपडेट किया।
चेतन

7
बहुत धन्यवाद! यह कोड काम करता है: - अगर (टाइपो यूज़रनेम! == "अपरिभाषित")
mbecker

93

@ चेतन की विधि से सरल यदि आप अपरिभाषित मूल्यों के बजाय मिथ्या मूल्यों के परीक्षण का बुरा नहीं मानते हैं:

if locals.username
  p= username
else
  p No Username!

यह काम करता है क्योंकि कुछ विडंबना का नाम localsटेम्पलेट के लिए मूल वस्तु है।


यह मुझे एक संकलक त्रुटि देता है: 'बिल्टइन_फंक्शन_ओर_मेथोड' ऑब्जेक्ट में कोई विशेषता नहीं है 'उपयोगकर्ता नाम'
zakdances

@yourfriendzak - क्या आप सुनिश्चित हैं कि आपकी त्रुटि आपके टेम्पलेट के इस हिस्से के कारण है?
15

1
सही काम करता है और यह इनलाइन जावास्क्रिप्ट का उपयोग करने से बेहतर है, धन्यवाद।
सेर्गी रामोन

मुझे यह उत्तर पसंद है क्योंकि इससे पता चलता है कि जेड व्हॉट्सएप संवेदनशील भाषा है।
विक्टर.पिलवोडा

यह केवल तभी काम करेगा जब renderस्टेज में कंट्रोलर में वैरिएबल को परिभाषित किया गया हो :res.render('view', {username: user.name});
ऑगस्टिन रीडिंजर

10
if 'username' in this
    p=username

यह काम करता है क्योंकि res.locals टेम्पलेट में रूट ऑब्जेक्ट है।


6

यदि आप पहले से जानते हैं कि आप एक विशेष रूप से उपलब्ध चर चाहते हैं, लेकिन हमेशा उपयोग नहीं किया जाता है, तो मैंने हेल्पर्स ऑब्जेक्ट में "डिफ़ॉल्ट" मान जोड़ना शुरू कर दिया है।

app.helpers({ username: false });

इस तरह, आप अभी भी if (username) {एक विपत्तिपूर्ण विफलता के बिना कर सकते हैं । :)


2
धन्यवाद, हालांकि व्यक्त 3.x के लिए FYI करें यह अब हैapp.locals({ username: false });
7zark7

6
अच्छा तरीका। ध्यान दें कि एक्सप्रेस 4.x app.localsमें कोई फ़ंक्शन नहीं है, इसलिए यह होना चाहिएapp.locals.username = false;
टॉम


0

isDefinedमेरे विचारों में हर जगह उपलब्ध विधि के लिए एक मिडलवेयर बनाया :

module.exports = (req, res, next) => {
  res.locals.isDefined = (variable) => {
    return typeof(variable) !== 'undefined'
  };  
  next();
};
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.