2012-11-03 9 views
6

मैं app.get व्यवहार का विस्तार करने की कोशिश कर रहा हूं लेकिन ऐसा लगता है कि ऐसा करने के बाद, ऐप को कुछ विन्यास को नुकसान पहुंचाता है जो मैंने इसे विस्तारित करने से पहले किया था।एक nodejs ऐप में एक्सप्रेस app.get विधि को विस्तारित करना

निम्नलिखित स्निपेट में /नमूना और /es/नमूना उत्पादन खाली कर रहे हैं और उम्मीद उत्पादन होना चाहिए 'मान'

मैं कुछ गलत कर रहा हूं?

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

app.set('myprop', 'value'); 

var _get = app['get']; 

app['get'] = function (route, middleware, callback) { 
    _get.call(app, route, middleware, callback); 

    // For instance: I generate a new route for 'es' language. 
    _get.call(app, '/es' + route, middleware, callback); 
}; 

app.get('/sample', function(req, res){ 
    res.send(app.get('myprop')); 
}); 

app.use(app.router); 
app.listen(3000); 

अद्यतन

क्षमा करें, मैं अपने आप को जवाब देंगे ...

मैं विस्तार विधि :)

if (middleware === undefined && callback === undefined) return _get.call(app, route); 
अब यह की तरह काम करता

में निम्नलिखित पहली पंक्ति याद किया जादू!

app['get'] = function (route, middleware, callback) { 
    if (middleware === undefined && callback === undefined) return _get.call(app, route); 
    _get.call(app, route, middleware, callback); 

    // For instance: I generate a new route for 'es' language. 
    _get.call(app, '/es' + route, middleware, callback); 
}; 

उत्तर

1

अपने कोड में आप एक तर्क के साथ app.get व्यवहार तोड़ दिया है। इसे आज़माएं:

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

app.set('myprop', 'value'); 

var _get = app['get']; 

app['get'] = function (route, middleware, callback) { 
    if (arguments.length > 1) { 
     _get.call(app, route, middleware, callback); 

     // For instance: I generate a new route for 'es' language. 
     _get.call(app, '/es' + route, middleware, callback); 
    } else { 
     return _get.apply(app, arguments); 
    } 
}; 

app.get('/sample', function(req, res){ 
    res.send(app.get('myprop')); 
}); 

app.use(app.router); 
app.listen(3000); 
+0

धन्यवाद वादिम! मैंने सवाल लिखने के बाद पता लगाया :) मैंने समाधान के साथ अपना प्रश्न भी अपडेट किया है लेकिन आपका बहुत बेहतर है। – user1796747

+0

बस ब्याज से बाहर ... इस लाइन को 'app.listen (3131) के बारे में क्या है; vadim @ zapp: ~/workspace/test $ cat।/Ex.js' ?? – Val

+0

@ वैल, यह कॉपी/पेस्ट डुप्लिकेशंस है। फिक्स्ड। धन्यवाद। –

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