क्या स्टैक से app.use
के साथ जोड़ा गया मिडलवेयर निकालने का एक कैननिक तरीका है? ऐसा लगता है कि यह should be possible to just modify the app.stack
array directly है, लेकिन मुझे आश्चर्य है कि क्या एक दस्तावेज विधि है जिसे मुझे पहले विचार करना चाहिए।एक्सप्रेस स्टैक से मिडलवेयर को हटाने का सही तरीका?
उत्तर
use
वास्तव में कनेक्ट (एक्सप्रेस नहीं), और all it really does is push the middleware function onto the app's stack
से आता है।
तो आपको सरणी के बाहर फ़ंक्शन को ठीक से विभाजित करना चाहिए।
हालांकि, ध्यान रखें कि app.stack
के आसपास कोई दस्तावेज नहीं है और न ही मिडलवेयर को निकालने के लिए कोई फ़ंक्शन है। आप कनेक्ट कोड परिवर्तन के भविष्य के संस्करण का जोखिम अपने कोड के साथ असंगत चलाते हैं।
या 'एक्सप्रेस' आपके कोड के साथ असंगत परिवर्तन कर रहा है। 'एक्सप्रेस' अब' कनेक्ट 'पर निर्भर नहीं है, इसलिए मुझे नहीं लगता कि यह अब और काम करता है। – trysis
ऐसा करने के लिए कोई रास्ता नहीं बनाया गया है, लेकिन आप एक छोटी सी चाल के साथ एक ही परिणाम प्राप्त कर सकते हैं। मिडलवेयर की अपनी खुद की सरणी बनाएं (चलो इसे dynamicMiddleware
पर कॉल करें) लेकिन इसे एक्सप्रेस में धक्का न दें, इसके बजाय केवल 1 मिडलवेयर दबाएं जो सभी हैंडलर को dynamicMiddleware
में अतुल्यकालिक रूप से निष्पादित करेगा और क्रम में। सरणी के माध्यम से है कि वसीयत पाश 1 मिडलवेयर में सभी गतिशील संचालकों सरणी लपेट,: के रूप में मैं इसे अभी परीक्षण करने के लिए एक मौका नहीं है, लेकिन विचार स्पष्ट किया जाना चाहिए
const async = require('async')
// Middleware
const m1 = (req, res, next) => {
// do something here
next();
}
const m2 = (req, res, next) => {
// do something here
next();
}
const m3 = (req, res, next) => {
// do something here
next();
}
let dynamicMiddleware = [m1, m2, m3]
app.use((req, res, next) => {
// execute async handlers one by one
async.eachSeries(
// array to iterate over
dynamicMiddleware,
// iteration function
(handler, callback) => {
// call handler with req, res, and callback as next
handler(req, res, callback)
},
// final callback
(err) => {
if(err) {
// handle error as needed
} else {
// call next middleware
next()
}
}
);
})
कोड थोड़ा किसी न किसी तरह है। और जैसे ही आप सरणी में हैंडलर जोड़ते हैं या हटाते हैं, केवल सरणी में छोड़े गए ही कॉल किए जाएंगे।
यह आवश्यक समस्या को हल नहीं करता है। कम से कम मेरे उपयोग मामले में, माउंट पॉइंट्स और विधियों के विभिन्न हैंडलिंग होने के लिए महत्वपूर्ण है। ऐसा लगता है कि आंतरिक ढेर को संशोधित करना अभी भी संभव है, इसे बस थोड़ा सा स्थानांतरित कर दिया गया है। – Brad
क्या आप कृपया अपने उपयोग के मामले को अधिक विस्तार से स्पष्ट कर सकते हैं। शायद आप इसे एक छोटे से मॉड्यूल में लपेट सकते हैं और अलग-अलग बढ़ते बिंदुओं पर पुन: उपयोग कर सकते हैं? – Gaafar
जहां तक मुझे पता है कि एक मिडलवेयर हटाने का कोई तरीका नहीं है। हालांकि, आप किसी भी समय किसी भी समय मिडलवेयर को 'निष्क्रिय' करने के लिए एक बूलियन ध्वज असाइन कर सकते हैं।
var middlewareA_isActivate = true;
//Your middleware code
function(req, res, next) {
if (!middlewareA_isActivate) next();
//.........
}
//Deactivate middleware
middlewareA_isActivate = false;
संपादित करें:
के माध्यम से ExpressJs (4.x) कोड को पढ़ने के बाद, मैं तुम्हें उपयोग कर सकते हैं कि middlewares app._router.stack
के माध्यम से ढेर नोटिस, जोड़-तोड़ वहां से चला जाता है मुझे लगता है कि। फिर भी, मुझे लगता है कि यह 'चाल' भविष्य में काम करने में सक्षम नहीं हो सकता है
पी/एस: परीक्षण नहीं किया गया है कि एक्सप्रेस कैसे व्यवहार करता है जब मध्यवर्ती ढेर सीधे चिपकते हैं
- 1. एक्सप्रेस मिडलवेयर
- 2. एक्सप्रेस ग्लोबल मिडलवेयर को
- 3. जीएलएसएल शेडर को हटाने का सही तरीका?
- 4. UIGestureRecognizers को जोड़ने/हटाने का सही तरीका
- 5. एक्सप्रेस/कनेक्ट मिडलवेयर से अनुरोध "समाप्त" करने का सही तरीका क्या है?
- 6. एक्सप्रेस 3 त्रुटि मिडलवेयर को
- 7. एफपीयू स्टैक से कुछ हटाने का सबसे आसान तरीका
- 8. एक्सप्रेस + वेबपैक-डीवी-मिडलवेयर/वेबपैक-हॉट-मिडलवेयर
- 9. एक्सप्रेस मिडलवेयर: app.use और app.all
- 10. रैक मिडलवेयर "फँसाने" स्टैक ट्रेस
- 11. एक्सप्रेस 4 मिडलवेयर त्रुटि हैंडलर को
- 12. एक्सप्रेस मिडलवेयर परीक्षण मोचा चाय
- 13. Node.js शरीर का सही उपयोग व्यक्त करें पार्सर मिडलवेयर
- 14. परम सत्यापन के लिए एक्सप्रेस मिडलवेयर जोड़ें
- 15. मोंगोडब और एक्सप्रेस शुरू करने का सही तरीका?
- 16. आरईएसटी में कई से अधिक रिश्तों को जोड़ने/हटाने से निपटने का सही तरीका क्या है?
- 17. LINQ से इकाइयों में रिकॉर्ड को हटाने का उचित तरीका
- 18. मिडलवेयर को पुनर्स्थापित करें -
- 19. वीएस प्रोजेक्ट से संसाधन छवियों को हटाने का सही तरीका क्या है?
- 20. क्या यह एनएसएआरएआरई से रिक्त स्ट्रिंग को हटाने का सही और सबसे प्रभावी तरीका है?
- 21. has_many को हटाने का सही तरीका: रिकॉर्ड में शामिल होने के माध्यम से?
- 22. जावास्क्रिप्ट के माध्यम से एक सीएसएस संपत्ति को हटाने/रीसेट करने का सही तरीका क्या है?
- 23. निष्क्रिय प्रमाणीकरण मोड में ओविन कुकी मिडलवेयर सेट को ट्रिगर करने का सही तरीका क्या है?
- 24. i386 में स्टैक से तर्कों को हटाने, एआरएम असेंबली
- 25. उल्का पिकर सर्वर साइड राउटर एक्सप्रेस मिडलवेयर का उपयोग
- 26. ImageButtons से ग्रे पृष्ठभूमि को हटाने का कोई तरीका?
- 27. हैश तालिका से प्रविष्टि को हटाने का सबसे अच्छा तरीका
- 28. स्ट्रिंग से एकाधिक सबस्ट्रिंग को हटाने का सबसे प्रभावी तरीका?
- 29. नेस्टेड शब्दकोशों से फ़ील्ड को हटाने का सुरुचिपूर्ण तरीका
- 30. पर्ल स्ट्रिंग से विशिष्ट वर्णों को हटाने का बेहतर तरीका
* उचित * तरीका अवांछित मिडलवेयर जोड़ने के लिए नहीं है। – elmigranto
@ एल्मिग्रेंटो यह एक अत्यधिक सरल दृष्टिकोण है। ऐसे कई कारण हैं जिनसे आप अधिक गतिशील तरीके से एक्सप्रेस रूटिंग का उपयोग करना चाह सकते हैं, जिसके लिए कुछ मामलों में मिडलवेयर जोड़ने/हटाने की आवश्यकता हो सकती है। – Brad
मिडलवायर स्टैक ऐप में है ._router.stack – rocketspacer