在nodejs应用程序中扩展快速app.get方法
我试图扩展app.get行为,但似乎在做这件事之后,应用程序在扩展之前会损失一些configuration。
在下面的代码片段中, / sample和/ es / sample输出是空的 ,预期的输出应该是'value'
难道我做错了什么?
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); };
在你的代码中,你用一个参数破坏了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);