2011-12-22 9 views
7

मेरे पास एक ऐसी स्थिति है जहां मुझे एक्सप्रेसजेएस एप्लिकेशन में एक ही प्रतिक्रिया ऑब्जेक्ट के साथ होने वाले एकाधिक प्रस्तुतकर्ताओं की आवश्यकता होती है। (मूल रूप से एक HTTP अनुरोध एकाधिक बैक-एंड अनुरोधों को ट्रिगर करता है, जिनमें से सभी पृष्ठ को तुरंत पूरा करने के परिणाम को पृष्ठ पर प्रस्तुत करना शुरू कर सकते हैं।) समस्या यह है कि मुझे प्रत्येक को एक दृश्य प्रस्तुत करने की आवश्यकता है (यानी मुझे नहीं लगता कि मैं उपयोग कर सकता हूं res.write()), और जहां तक ​​मैं कह सकता हूं, प्रतिक्रिया देने के लिए res.render() का कोई तरीका नहीं है या प्रत्येक बार इसे कॉल करने वाले शीर्षलेख लिखने के लिए कोई रास्ता नहीं है।ExpressJS के साथ एक ही प्रतिक्रिया ऑब्जेक्ट पर एकाधिक बार कैसे प्रस्तुत करें?

मुझे क्या याद आ रही है?

+1

आप एक HTTP अनुरोध पर दो बार कैसे प्रतिक्रिया दे सकते हैं? –

+0

यह दो बार प्रतिक्रिया नहीं दे रहा है - यह सिर्फ इतना है कि मैं एकाधिक कार्यों से पृष्ठ पर आउटपुट स्ट्रीम करने में सक्षम होना चाहता हूं। HTTP अनुरोध के परिणामस्वरूप कई एपीआई कॉल में अन्य सेवाओं को कॉल किया जाता है जो प्रतिक्रिया के भाग उत्पन्न करते हैं। सभी को एक बार में पृष्ठ का जवाब देने और प्रस्तुत करने की प्रतीक्षा करने के बजाय, मैं "ओपन" रहने के लिए प्रतिक्रिया ऑब्जेक्ट चाहता हूं ताकि मैं सभी एपीआई कॉल पूर्ण होने तक दृश्य (अधिक सटीक रूप से एक दृश्य आंशिक) लिख सकूं। –

+0

आह, 'res.write' तब आपका एकमात्र विकल्प होगा। बेशक, 'res.render' के माध्यम से पृष्ठ के हिस्से को लोड करने का विकल्प भी है, फिर बाकी लोड करने के लिए AJAX का उपयोग करना। –

उत्तर

8

एक्सप्रेस EJS, जेड आदि की तरह एक इंजन का उपयोग कर टेम्पलेट संकलित

डेटा तो response.send का उपयोग कर दिया गया है: तुम वहाँ देख सकते हैं https://github.com/visionmedia/express/blob/master/lib/response.js#L76-131

, है अंत में वहाँ this.end..., जो मतलब प्रतिक्रिया.एंड (...)।

यदि आप कई विचार भेजना चाहते हैं, तो आपको दृश्य इंजन का उपयोग करके उन विचारों को स्वयं संकलित करना होगा और फिर प्रतिक्रिया.send (जिसे मैंने आपको उपरोक्त लिंक दिया) के समान फ़ंक्शन बनाना होगा, लेकिन सावधान रहें कि उसे न भेजें आखिरी दृश्य प्रस्तुत करने से पहले हेडर दो बार या प्रतिक्रिया प्रतिक्रिया दें।

+3

मैंने यह जवाब स्वीकार कर लिया है क्योंकि यह सबसे तकनीकी रूप से उपयुक्त समाधान है। मेरे मामले में, मैंने प्रतिक्रियाओं को एकत्रित करने के लिए कई कॉल करने के तरीके को दोबारा डिजाइन किया और केवल एक बार प्रस्तुत किया क्योंकि यह एक बेहतर दृष्टिकोण की तरह लग रहा था। एलेसियोलेक्स का मार्गदर्शन किसी भी व्यक्ति के लिए है जो इस तक पहुंचना चाहता है - कोड के सूचक को बिल्कुल ठीक कहां से शुरू करना है। –

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