2013-03-22 6 views
13

मान लीजिए कि मेरे पास मिडलवेयर है;एक्सप्रेस/कनेक्ट मिडलवेयर से अनुरोध "समाप्त" करने का सही तरीका क्या है?

var express = require('express'); 
var app = express(); 

app.use(function (req, res, next) { 
    var host = "example.com"; 

    if (req.host !== host) { 
     res.redirect(301, host + req.originalUrl); 
     res.end(); 
    } 
}); 

मुझे यहां किस तरह के नियमों का पालन करने की आवश्यकता है?

  1. क्या मुझे res.end() पर कॉल करना चाहिए? (या res.redirect() मेरे लिए यह करें?)
  2. क्या मुझे next() पर कॉल करना चाहिए? (या कनेक्ट करता है सफाई से अनुरोध समाप्त हो गया है और बाहर निकलने का पता लगाने?)
  3. यह मानते हुए कि मैं चाहिए next() बुला सकता है, मुझे लगता है कि इसका मतलब है कि मैं कर सकते हैं मेरी मिडलवेयर के लिए संभावित रूप से प्राप्त हो अनुरोध जो पहले से ही अन्य द्वारा समाप्त किया गया हो सकता श्रृंखला में मिडलवेयर उच्च; मैं इसके खिलाफ खुद को कैसे बचा सकता हूं?

उत्तर

18
  1. res.redirect() वास्तव में res.end() ही कहता है;
  2. यदि आपको मिडलवेयर अंत बिंदु नहीं है तो आपको next() पर कॉल करना चाहिए; रीडायरेक्ट उत्पन्न करने के मामले में, एक एंडपॉइंट और next() नहीं कहा जाना चाहिए, लेकिन req.host === host पर, आपको next() पर कॉल को अन्य मिडलवेयर/मार्गों पर अनुरोध को स्थानांतरित करने के लिए कॉल करने की आवश्यकता है;
  3. एक अनुरोध समाप्त नहीं होता है, एक प्रतिक्रिया करता है। और जब ऐसा होता है, तो यह मिडलवेयर श्रृंखला समाप्त कर देगा ताकि आपको इसके बारे में चिंता न करें।
+1

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

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