2011-10-07 15 views
40

मेरे पास सर्वर पर एक बहुत ही भारी वजन वाली क्वेरी है जिसके परिणामस्वरूप एक नया पृष्ठ प्रस्तुत होता है, और मैं क्लाइंट को क्वेरी के कुछ परिणामों (ऑब्जेक्ट्स के जावास्क्रिप्ट सरणी के रूप में) पास करना चाहता हूं। यह मूल रूप से है इसलिए मुझे वही सामग्री प्राप्त करने के लिए बाद में एक अलग JSON क्वेरी करने की आवश्यकता नहीं है (जो अधिकतर स्थैतिक है)। अंततः डेटा उपयोगी होगा, लेकिन प्रारंभ में नहीं, इसलिए मैंने इसे सीधे दस्तावेज़ में नहीं रखा।नोड + एक्सप्रेस + जेड में क्लाइंट को ऑब्जेक्ट पास करना?

app.get('/expensiveCall', function(req, res) { 
    // do expensive call 
    var data = veryExpensiveFunction(); 
    res.render('expensiveCall.jade', { 
     locals: { 
       data: data, 
       } 
     }); 
    }); 
}); 

डेटा ऑब्जेक्ट्स की एक सरणी है और केवल कुछ प्रारंभ में उपयोग किए जाते हैं। मैं या तो डेटा की पूरी तरह से या कुछ सबसेट (स्थिति के आधार पर) पास करना चाहता हूं। मेरे जेड सामान्य जेड की तरह लग रहा है, लेकिन मैं की तरह

<script type="text/javascript"> 
var data = #{data}; 
</script> 

कुछ शामिल करना चाहते हैं, लेकिन यह काम नहीं करता है (यह ऑब्जेक्ट की श्रृंखला है)।

उत्तर

87

आपको लगता है कि जैसे एक जे एस वस्तु अनुरूप नहीं सकते हैं, लेकिन इससे पहले कि आप यह JSON.stringify कर सकते हैं:

<script type="text/javascript"> 
    var data = !{JSON.stringify(data)}; 
</script> 
+1

क्षमा कहा जाना चाहिए था कि पहले: जेड सभी सामग्री मैं भी यह unescape करना होगा जिसका मतलब है कि उत्सर्जित पलायन , और यह स्पष्ट नहीं है कि कैसे बच निकलना बंद करें। मुझे लगता है कि एक्सप्रेस के साथ करने का कोई तरीका है, लेकिन मुझे यकीन नहीं है कि कैसे। मैं बस एक अलग टेम्पलेट इंजन पर स्विच कर सकता हूं लेकिन इसका मतलब है कोडिंग कोड :-( – killermonkeys

+9

यदि आप '# {}' के बजाय '! {}' का उपयोग करते हैं तो बच निकलना बंद कर दिया जाना चाहिए। – Adrien

+0

एएके! मैंने उसे पकड़ नहीं लिया , समझ में आता है। धन्यवाद! – killermonkeys