2012-09-24 11 views
6

मैं express3.0rc2 पर हूं। कैसे app.locals.use उपयोग करने के लिए (यह अभी भी मौजूद है) और res.locals.useएक्सप्रेस 3.0 app.locals.use और res.locals.use का उपयोग कैसे करें

मैं इस https://github.com/visionmedia/express/issues/1131 देखा था, लेकिन app.locals.use एक त्रुटि फेंकता है। मुझे लगता है कि एक बार जब मैं app.locals.use में फ़ंक्शन डालता हूं तो मैं इसे मार्गों में उपयोग कर सकता हूं।

मैं किसी भी मार्ग कॉल में इस मिडलवेयर

धन्यवाद

app.locals.use(myMiddleware(req,res,next){res.locals.uname = 'fresh'; next();}) 

और फिर जोड़ने की सोच रहा था

उत्तर

8

अगर मैं तुम्हें सही ढंग से समझ आप निम्न कर सकते हैं:

app.configure(function(){ 
    // default express config 
    app.use(function (req, res, next) { 
    req.custom = "some content"; 
    next(); 
    }) 
    app.use(app.router); 
}); 

app.get("/", function(req, res) { 
    res.send(req.custom) 
}); 

अब आप प्रत्येक मार्ग में req.custom चर का उपयोग कर सकते हैं। सुनिश्चित करें कि आप राउटर से पहले app.use फ़ंक्शन डाल दें!

संपादित करें:

ठीक अगले कोशिश :) आप अपने मिडलवेयर उपयोग कर सकते हैं और मार्गों में यह निर्दिष्ट आप चाहते हैं:

function myMiddleware(req, res, next) { 
    res.locals.uname = 'fresh'; 
    next(); 
} 

app.get("/", myMiddleware, function(req, res) { 
    res.send(req.custom) 
}); 

या आप इसे सेट कर सकते हैं "विश्व स्तर पर":

app.locals.uname = 'fresh'; 

// which is short for 

app.use(function(req, res, next){ 
    res.locals.uname = "fresh"; 
    next(); 
}); 
+0

नहीं, मैं अलग-अलग मार्गों पर फ़ंक्शन कॉल करना चाहता हूं और मैं ऐप मान रहा हूं। मुझे यह मदद करने में मदद मिलेगी – coool

+0

मेरा उत्तर – zemirco

+0

धन्यवाद। लेकिन अगर आपने मेरे द्वारा भेजे गए गिथब लिंक को चेक किया है तो मेरा मिडलवेयर परिभाषित किया जा रहा है और फिर रूट फ़ंक्शन पर अब से app.locals.use (myMiddleware) पर कॉल MyMiddleware को कॉल करने में सक्षम है। लेकिन मैं ऐसा करने में सक्षम नहीं हूं क्योंकि app.locals.use एक त्रुटि फेंकता है। और res.locals.use के साथ अवधारणा क्या है (मैं res.locals समझता हूं) .. फिर से धन्यवाद – coool

10

मैं एक्सप्रेस 3.0 उपयोग कर रहा हूँ और यह मेरे लिए काम करता है:

app.use(function(req, res, next) { 
    res.locals.myVar = 'myVal'; 
    res.locals.myOtherVar = 'myOtherVal'; 
    next(); 
}); 

मेरे पास मेरे टेम्पलेट्स में myVal और myOtherVal तक पहुंच है (या सीधे res.locals के माध्यम से)।

+1

मैं res.locals को समझता हूं लेकिन res.locals.use के साथ क्या करता है .. ?? – coool

+0

'res.locals' का उपयोग किसी टेम्पलेट पर मानों को पास करने के लिए किया जाता है। 'res.locals.use' तब तक अनिर्धारित नहीं है जब तक आप इसे असाइन नहीं करते। Https://github.com/visionmedia/express/blob/master/lib/response.js#L708 –

+1

पर विचार करें, मैं कथन से उलझन में था "मुझे तब ** myVal ** और ** myOtherVal तक पहुंच है * * "क्योंकि मैंने सोचा था कि इसका मतलब है कि आप 'myVar + =' anotherString 'जैसी कुछ कर सकते हैं, लेकिन वास्तव में आपको अभी भी ** res.locals होना चाहिए। ** भाग यानी' res.locals.myVar + = ' एक और स्ट्रिंग '। तो यह काम करेगा –

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