2012-11-03 43 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); 

UPDATE

對不起,我會回答自己...

我錯過了擴展方法:)

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

Thanks Vadim!我在寫完問題後想通了:)我也用解決方案更新了我的問題,但是你的問題好多了。 – user1796747

+0

只是出於興趣...這是什麼關於'app.listen(3131); vadim @ zapp:〜/ workspace/test $ cat。/ ex.js'? – Val

+0

@Val,這是複製/粘貼複製。固定。謝謝。 –