NodeJS / एक्सप्रेस: ​​"app.use" क्या है?


332

में NodeJS के लिये दस्तावेज expressमॉड्यूल , उदाहरण के कोड है app.use(...)

क्या है useकार्य और इसे कहाँ परिभाषित किया गया है?



इस प्रकार के प्रश्नों का उत्तर प्रलेखन को पढ़कर दिया जा सकता है।
मीना

47
प्रलेखन एक शुरुआत के लिए थोड़ा गुप्त है
KansaiRobot

6
ऊपर संभव डुप्लिकेट एक दूसरे को संदर्भित कर रहा है
अफरीग अमीनुद्दीन

1
प्रलेखन पूरी तरह से अस्पष्ट है
Tessaracter

जवाबों:


369

एक्सप्रेस सर्वर के निर्माण पर ऐप ऑब्जेक्ट को त्वरित किया जाता है। इसमें एक मिडलवेयर स्टैक है जिसे कस्टमाइज़ किया जा सकता है app.configure()(यह अब संस्करण 4.x में हटा दिया गया है)

अपने मिडलवेयर को सेटअप करने के app.use(<specific_middleware_layer_here>)लिए , आप प्रत्येक मिडलवेयर लेयर के लिए इनवॉइस कर सकते हैं, जिसे आप जोड़ना चाहते हैं (यह सभी रास्तों के लिए सामान्य हो सकता है, या केवल विशिष्ट पथों पर ट्रिगर किया जा सकता है), और यह आपके एक्सप्रेस मिडलवेयर स्टैक पर जोड़ देगा । मिडलवेयर लेयर्स को एक के बाद एक कई इनवोकेशन में एक-एक करके जोड़ा जा सकता है use, या एक बार में एक ही बार में एक ही इनवोकेशन के साथ जोड़ा जा सकता है । प्रलेखन देखेंuseअधिक विवरण के लिए ।

एक्सप्रेस मिडलवेयर की वैचारिक समझ के लिए एक उदाहरण देने के लिए, यहाँ मेरा ऐप मिडलवेयर स्टैक (app.stack) कैसा दिखता है जब JSON के रूप में कंसोल पर मेरी ऐप ऑब्जेक्ट को लॉग इन कर रहा है:

stack: 
   [ { route: '', handle: [Function] },
     { route: '', handle: [Function: static] },
     { route: '', handle: [Function: bodyParser] },
     { route: '', handle: [Function: cookieParser] },
     { route: '', handle: [Function: session] },
     { route: '', handle: [Function: methodOverride] },
     { route: '', handle: [Function] },
     { route: '', handle: [Function] } ]

आप अनुमान करने में सक्षम हो सकते हैं, मैं कहा जाता है app.use(express.bodyParser()), app.use(express.cookieParser()), आदि, जो मिडलवेयर ढेर करने के लिए इन एक्सप्रेस मिडलवेयर 'परतों' जोड़ी गई। ध्यान दें कि मार्ग रिक्त हैं, इसका मतलब है कि जब मैंने उन मिडलवेयर परतों को जोड़ा था जो मैंने निर्दिष्ट किया था कि उन्हें किसी भी मार्ग पर ट्रिगर किया जाएगा। अगर मैंने एक कस्टम मिडलवेयर लेयर जोड़ी है जो केवल उस पथ पर ट्रिगर /user/:idहोती है जो एक स्ट्रिंग के रूप में परिलक्षित होगीroute ऊपर स्टैक प्रिंटआउट में उस मिडलवेयर लेयर ऑब्जेक्ट क्षेत्र ।

प्रत्येक परत अनिवार्य रूप से एक फ़ंक्शन जोड़ रही है जो विशेष रूप से मिडलवेयर के माध्यम से आपके प्रवाह के लिए कुछ संभालती है।

जैसे जोड़कर bodyParser, आप सुनिश्चित कर रहे हैं कि आपका सर्वर एक्सप्रेस मिडलवेयर के माध्यम से आने वाले अनुरोधों को संभालता है । इसलिए, अब आने वाले अनुरोधों के मुख्य भाग को पार्स करना उस प्रक्रिया का हिस्सा है जो आपके मिडलवेयर को आने वाले अनुरोधों को संभालने में लेता है - क्योंकि आपने बुलाया था app.use(bodyParser)


116
धन्यवाद। एक्सप्रेस लोगों के लिए अपने एपीआई डॉक्स में यह बताना कितना मुश्किल होगा?
एरिकोस्को जू

4
इसलिए आप कह रहे हैं कि जब कोई अनुरोध प्राप्त होता है, तो वास्तविक सेवा से पहले डेटा को उन पार्सरों के माध्यम से पारित किया जाता है। इसलिए उदाहरण के लिए: मान्य अनुरोध-> प्रमाणीकरण-> प्रक्रियाएं-> सबसे महत्वपूर्ण- ServResponse USE एक विशिष्ट क्रम में उन चरणों को नियंत्रित करेगा और उन्हें समानांतर निष्पादित नहीं करेगा?
एडम हेस

2
तो app.use () कार्रवाई में निर्भरता इंजेक्शन है?
केविन सी।

8
वह फ़ंक्शन कब है जिसे app.use पर भेजा जाता है? एक्सप्रेस सर्वर बनाने के बाद या हर अनुरोध के लिए?
टिमो हुओवेंन

5
@KevinC। नहीं, यह निर्भरता इंजेक्शन नहीं है। यह एक प्लगइन वास्तुकला है। आम तौर पर इस तरह की वास्तुकला को एक फिल्टर सिस्टम / फिल्टर पाइपलाइन / पाइप और फिल्टर कहा जाता है। एक्सप्रेस में पाइप next()कॉलबैक है प्रत्येक मिडलवेयर को पाइप लाइन में अगले फ़ंक्शन के लिए प्रसंस्करण को कॉल करने की उम्मीद है। रूटिंग सिस्टम (पहला तर्क app.use()) पाइप लाइन को URL पर निर्भर होने की अनुमति देता है
slebetman

50

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

अद्यतन संस्करण 4.x से शुरू, एक्सप्रेस अब कनेक्ट पर निर्भर नहीं करता है

मिडवेवेयर फ़ंक्शंस जो पहले एक्सप्रेस के साथ शामिल थे, अब अलग मॉड्यूल में हैं; मिडलवेयर फ़ंक्शंस की सूची देखें ।


3
और ऑनलाइन डॉक्स यहां हैं: senchalabs.org/connect/proto.html#app.use
अलेक्जेंडर बर्ड

क्या यह कारगर होगा यदि एक नोड मिडिलवेयर ऑब्जेक्ट्स को त्वरित करता है? क्या इसका मतलब यह होगा कि हर अनुरोध पर, मिडलवेयर नई वस्तुओं को तुरंत बदल देता है? क्या पुरानी वस्तुएं छूट जाती हैं? उदाहरण के लिएapp.use(function(){ var object = new SomeConstructor; next(); })
CMCDragonkai

1
@CMCDragonkai हर अनुरोध पर वस्तुओं को तुरंत भेजना ठीक है। जब तक आप अपने अनुरोध हैंडलर के दायरे से बाहर की वस्तुओं के संदर्भ में भंडारण नहीं कर रहे हैं, तब तक वे कचरा एकत्र कर लेंगे।
jeff_mcmahan

1
लिंक के लिए @AlexanderBird thx (हालांकि पहले एक टूट गया है)। रिकॉर्ड के लिए, केवल 2 लिंक में डॉक्टर की भीख मांगना "दिए गए मार्ग के लिए दिए गए मिडलवेयर हैंडल का उपयोग करता है, / के लिए डिफ़ॉल्ट है। यह" मार्ग "मिडलवेयर के लिए माउंट-पॉइंट है, जब एक मान के अलावा अन्य दिया जाता है /। मिडलवेयर केवल तभी प्रभावी होता है जब वह खंड अनुरोध के पथनाम में मौजूद होता है। उदाहरण के लिए यदि हम / व्यवस्थापक पर कोई फ़ंक्शन माउंट करते हैं, तो उसे / व्यवस्थापक, और / व्यवस्थापक / सेटिंग्स पर लागू किया जाएगा, हालांकि इसे / के लिए आमंत्रित नहीं किया जाएगा। , या / पोस्ट "। सिंपल :)
एड्रियन बनो

40

प्रत्येक एप्लिकेशन (मिडलवेयर) को हर बार सर्वर पर एक अनुरोध भेजा जाता है।


7
आपका एकल वाक्य उत्तर अन्य बहु-पैरा स्पष्टीकरणों की तुलना में तुरंत समझने योग्य और अधिक उपयोगी है।
stackedAndOverflowed

16

app.use () मिडलवेयर फ़ंक्शन को माउंट करने या निर्दिष्ट पथ पर माउंट करने के लिए उपयोग किया जाता है, बेस पथ से मेल खाने पर मिडिलवेयर फ़ंक्शन को निष्पादित किया जाता है।

उदाहरण के लिए: यदि आप indexRouter.js में app.use () का उपयोग कर रहे हैं, तो इस तरह:

//indexRouter.js

var adsRouter = require('./adsRouter.js');

module.exports = function(app) {
    app.use('/ads', adsRouter);
}

उपरोक्त कोड में app.use () adsRouter.js पर '/ ads' पर पथ को माउंट करें।

अब adsRouter.js में

// adsRouter.js

var router = require('express').Router();
var controllerIndex = require('../controller/index');
router.post('/show', controllerIndex.ads.showAd);
module.exports = router;

adsRouter.js में, मार्ग विज्ञापनों के लिए इस तरह होगा- '/ ads / show', और फिर यह नियंत्रक के अनुसार काम करेगा। Index.ads.showAd ()।

app.use ([पथ], कॉलबैक, [कॉलबैक]): हम उसी पर कॉलबैक जोड़ सकते हैं।

app.use('/test', function(req, res, next) {

  // write your callback code here.

    });

मैं "माउंट" के स्थान पर "मानचित्र" का उपयोग करूँगा, समझने में आसान।
Jeb50

13

app.use () एक्सप्रेस ऐप्स में एक मिडलवेयर के रूप में कार्य करता है। App.get () और app.post () या तो के विपरीत , आप वास्तव में अनुरोध URL को निर्दिष्ट किए बिना app.use () का उपयोग कर सकते हैं । ऐसे मामले में यह क्या करता है, यह हर बार निष्पादित हो जाता है, चाहे कोई भी यूआरएल हिट हो।


7

app.use () उस तरह काम करता है:

  1. नोड HTTP सर्वर उदाहरण पर अनुरोध इवेंट ट्रिगर किया गया।
  2. एक्सप्रेस अपने भीतर के हेरफेर को req ऑब्जेक्ट के साथ करता है।
  3. यह तब होता है जब एक्सप्रेस आपके द्वारा app.use के साथ निर्दिष्ट चीजें करना शुरू कर देता है

जो बहुत ही सरल है।

और उसके बाद ही बाकी सामान रूटिंग की तरह किया जाएगा।


6
app.use(function middleware1(req, res, next){
   // middleware1 logic
}, function middleware1(req, res, next){
   // middleware2 logic
}, ... middlewareN);

app.use मिडलवेयर पंजीकरण अनुक्रम के आदेश के आधार पर किसी भी अंतिम मार्ग तर्क या मध्यस्थ मार्ग तर्क को निष्पादित करने से पहले मिडलवेयर या मिडलवेयर (या कई मिडलवेयर) की श्रृंखला को पंजीकृत करने का एक तरीका है ।

मिडलवेयर: 3 पैरामीटर रीक, रेस और नेक्स्ट के साथ फंक्शंस / मिडलवेयर-फंक्शंस की चेन बनाता है । अगला कॉलबैक है जो अगले मिडलवेयर-फंक्शन को चेन में संदर्भित करता है और चेन के अंतिम मिडिलवेयर-फंक्शन के मामले में अगले पंजीकृत मिडलवेयर-चेन के पहले-मिडलवेयर-फंक्शन को इंगित करता है।


1
एक जादू की तरह काम करता है !!
अनमोल राय

3

यदि हम एक्सप्रेस "एक्सप्रेस" से आयात करते हैं और एप्लिकेशन = एक्सप्रेस () का उपयोग करते हैं, तो एक्सप्रेस में; फिर एक्सप्रेस की सभी कार्यक्षमता वाले ऐप

अगर हम app.use () का उपयोग करते हैं

पूरे एक्सप्रेस प्रोजेक्ट में उपयोग करने के लिए किसी भी मॉड्यूल / मिडलवेयर फ़ंक्शन के साथ


3

app.useएक फ़ंक्शन को मिडलवेयर की आवश्यकता होती है। उदाहरण के लिए:

 app.use('/user/:id', function (req, res, next) {
       console.log('Request Type:', req.method);
        next();
     });

यह उदाहरण /user/:idपथ में स्थापित मिडलवेयर फ़ंक्शन को दिखाता है । इस फ़ंक्शन को /user/:idपथ में किसी भी प्रकार के HTTP अनुरोध के लिए निष्पादित किया जाता है।

यह REST वेब सर्वर के समान है, बस अलग- /xxअलग क्रियाओं का प्रतिनिधित्व करने के लिए अलग-अलग उपयोग करें।


उत्तर के लिए धन्यवाद, लेकिन जब से किसी और ने पहले ही यह सब कहा है कि मैं इस जानकारी को नहीं बढ़ाऊंगा। मुझे नहीं लगता कि मुझे हर स्पष्टीकरण की आवश्यकता है जो एक्सप्रेस useकर सकता है; मुझे बस यह जानने की जरूरत थी कि यह क्या था (और किसी भी संदर्भ में यह जानने के लिए कि शोध को और अधिक कैसे जाना जाए)।
अलेक्जेंडर बर्ड

3

app.use app अनुरोध के लिए मिडलवेयर के रूप में woks है । वाक्य - विन्यास

app.use('pass request format',function which contain request response onject)

उदाहरण

app.use('/',funtion(req,res){
 console.log(all request pass through it);
// here u can check your authentication and other activities.
})

अपने अनुरोध को रूट करने के मामले में भी आप इसका उपयोग कर सकते हैं।

app.use('/', roting_object);

2

मिडलवेयर सॉफ्टवेयर के लिए एक सामान्य शब्द है जो "ग्लू को एक साथ" परोसता है इसलिए app.use मिडवेवेयर को कॉन्फ़िगर करने का एक तरीका है, उदाहरण के लिए: अनुरोध के शरीर को पार्स और हैंडल करने के लिए: app.use (bodyParser.urlencoded ({विस्तारित): सच })); app.use (bodyParser.json ()); कई बिचौलिए हैं जिन्हें आप अपने एक्सप्रेस एप्लिकेशन में उपयोग कर सकते हैं बस डॉक्टर पढ़ें: http://expressjs.com/en/guide/use-middleware.html


2

app.use निर्दिष्ट मिडलवेयर को मुख्य ऐप मिडिलवेयर स्टैक पर लागू करता है। जब मिडलवेयर को मुख्य ऐप स्टैक में संलग्न करते हैं, तो अनुलग्नक का क्रम मायने रखता है; यदि आप मिडलवेयर बी से पहले मिडलवेयर ए संलग्न करते हैं, तो मिडलवेयर ए हमेशा पहले निष्पादित होगा। आप एक पथ निर्दिष्ट कर सकते हैं जिसके लिए एक विशेष मिडलवेयर लागू है। नीचे दिए गए उदाहरण में, "हैलो वर्ल्ड" हमेशा "खुशहाल छुट्टियों" से पहले लॉग इन किया जाएगा।

const express = require('express')
const app = express()

app.use(function(req, res, next) {
  console.log('hello world')
  next()
})

app.use(function(req, res, next) {
  console.log('happy holidays')
  next()
})

2

यह आप किसी भी मिडलवेयर उपयोग करने के लिए (सक्षम बनाता है और पढ़ें ) की तरह body_parser, CORSआदि Middleware में परिवर्तन कर सकते requestहैं और responseवस्तुओं। यह कोड का एक टुकड़ा भी निष्पादित कर सकता है।


उत्तर के लिए धन्यवाद, लेकिन मुझे विश्वास है कि सभी जानकारी पहले से ही अन्य उत्तरों में कैप्चर की गई है
अलेक्जेंडर बर्ड

2

आप अपने खुद के मिडलवेयर फ़ंक्शन भी बना सकते हैं

app.use( function(req, res, next) {
  // your code 
  next();
})

यह तीन पैरामीटर शामिल हों req, res, next
तुम भी प्रमाणीकरण और इनपुट पैरामीटर के सत्यापन के लिए उपयोग अपने नियंत्रक को साफ रखने के कर सकते हैं।

next()अगले मिडलवेयर या रूट पर जाने के लिए उपयोग किया जाता है।
आप मिडलवेयर से प्रतिक्रिया भेज सकते हैं


1

एप्लिकेशन का उपयोग करके ऐप ऑब्जेक्ट के एक उदाहरण के लिए बिंदू-स्तरीय मिडलवेयर को जोड़ें। () और ऐप। एमईटीएचओडी () फ़ंक्शन, जहां METHOD अनुरोध का HTTP तरीका है जो मिडलवेयर फ़ंक्शन को हैंडल करता है (जैसे GET, PUT, या लोअरकेस में POST)।


1

संक्षेप में app.use () सभी प्रकार के अनुरोधों का समर्थन करता है [जैसे: get, post, ...] इसलिए इसका ज्यादातर उपयोग middelware को सेटअप करने के लिए किया जाता है। या जब मार्गों और कार्यों के अलग होने के लिए उपयोग किया जा सकता है

उदाहरण:

app.use("/test",functionName)

और फ़ंक्शननाम अलग फ़ाइल में स्थित है


उत्तर के लिए धन्यवाद, लेकिन मेरा मानना ​​है कि सभी जानकारी पहले से ही अन्य उत्तरों में कैद है।
अलेक्जेंडर बर्ड

1

app.use() एक मिडलवेयर विधि है।

मिडलवेयर विधि जावा में इंटरसेप्टर की तरह है, यह विधि हमेशा सभी अनुरोधों के लिए निष्पादित होती है।

मिडलवेयर का उद्देश्य और उपयोग: -

  1. यह देखने के लिए कि सत्र समाप्त हो गया है या नहीं
  2. उपयोगकर्ता प्रमाणीकरण और प्राधिकरण के लिए
  3. कुकी की जांच करें (समाप्ति तिथि)
  4. प्रतिक्रिया से पहले डेटा पार्स

Middleware app.use () में पारित फ़ंक्शन है।
नैटसी

1

app.use
एक्सप्रेस (नोडज मिडलवेयर फ्रेमवर्क) द्वारा बनाया गया है।
ऐप का उपयोग किसी भी विशिष्ट क्वेरी को इंट्राइजेशन प्रोसेस
server.js (नोड)
var ऐप पर निष्पादित करने के लिए किया जाता है = आवश्यकता ('एक्सप्रेस'); इसलिए मूल रूप से app.use फ़ंक्शन को हर बार जब सर्वर अप कहा जाता है
app.use(bodyparser.json())


0

app.use अनुप्रयोग स्तर मिडलवेयर है

एप्लिकेशन का उपयोग करके ऐप ऑब्जेक्ट के एक उदाहरण के लिए बिंदू-स्तरीय मिडलवेयर को जोड़ें। () और ऐप। एमईटीएचओडी () फ़ंक्शन, जहां METHOD अनुरोध का HTTP तरीका है जो मिडलवेयर फ़ंक्शन को हैंडल करता है (जैसे GET, PUT, या लोअरकेस में POST)।

आप सभी अनुरोधों की जांच करने के लिए उपयोग कर सकते हैं, उदाहरण के लिए, आप टोकन / एक्सेस टोकन की जांच करना चाहते हैं, आपको अनुरोध में टोकन की जांच करने के लिए app.use का उपयोग करके एक मिडलवेयर लिखने की आवश्यकता है।

यह उदाहरण कोई माउंट पथ के साथ एक मिडलवेयर फ़ंक्शन दिखाता है। एप्लिकेशन को अनुरोध प्राप्त होने पर हर बार फ़ंक्शन निष्पादित किया जाता है।

var app = express()

app.use(function (req, res, next) {
  console.log('Time:', Date.now())
  next()
})

https://expressjs.com/en/guide/use-middleware.html से संदर्भ


app.use () मिडलवेयर नहीं है। Middleware app.use ()
NattyC

0

app.use (पाथ, मिडलवेयर) का उपयोग मिडिलवेयर फ़ंक्शन को कॉल करने के लिए किया जाता है जिसे संबंधित पथ के लिए मार्ग हिट होने से पहले कॉल करने की आवश्यकता होती है। कई मिडलवेयर फ़ंक्शंस app.use के माध्यम से मंगाए जा सकते हैं।

app.use ('/ fetch', enforceAuthentication) -> enforceAuthentication मिडलवेयर fn को कॉल किया जाएगा जब '/ लाने' के साथ शुरू होने वाला अनुरोधप्राप्त होगा। यह / fetch / users , / fetch / ids / {id} , आदि हो सकता है

कुछ मिडलवेयर फ़ंक्शंस को अनुरोध के बावजूद कहा जा सकता है। ऐसे मामलों के लिए, एक पथ निर्दिष्ट नहीं किया जाता है, और चूंकि पथ / और हर अनुरोध के साथ शुरू होता है / , इस मिडलवेयर फ़ंक्शन को सभी अनुरोधों के लिए बुलाया जाएगा।

app.use () (> => // एक सामान्य सेवा प्रारंभ करें))

अगले () fn को प्रत्येक मिडलवेयर फ़ंक्शन के भीतर बुलाया जाना चाहिए, जब कई मिडलवेयर फ़ंक्शंस app.use में पास किए जाते हैं , अन्यथा अगले मिडलवेयर फ़ंक्शन को नहीं बुलाया जाएगा।

संदर्भ: http://expressjs.com/en/api.html#app.use

नोट: प्रलेखन कहता है कि हम वर्तमान मिडलवेयर फ़ंक्शन के भीतर अगले ('मार्ग') को कॉल करके मिडिलवेयर फ़ंक्शंस को बायपास कर सकते हैं , लेकिन इस तकनीक ने ऐप के भीतर मेरे लिए काम नहीं किया। लेकिन ऐप के साथ काम किया। नीचे की तरह । तो, fn1 और fn2 को नहीं बल्कि fn3 कहा जाता था।

app.get('/fetch', function fn1(req, res, next)  {
    console.log("First middleware function called"); 
        next();
    }, 
    function fn2(req, res, next) {
        console.log("Second middleware function called"); 
        next("route");
    }, 
    function fn3(req, res, next) {
        console.log("Third middleware function will not be called"); 
        next();
    })
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.