2012-11-03 13 views
6

Próbuję rozszerzyć zachowanie app.get, ale wygląda na to, że po wykonaniu tej czynności utraciłem konfigurację, którą wykonałem, zanim ją rozszerzyłem.Rozszerzanie ekspresowej metody app.get w aplikacji nodejs

W poniższym fragmencie /próbkę i /es/próbkę wyjściowe są pusty i oczekiwany wynik powinien być „wartość”

Czy robię coś źle?

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

Niestety, odpowiem sobie ...

brakowało mi następującą pierwszą linię w metodzie wydłużania :)

if (middleware === undefined && callback === undefined) return _get.call(app, route); 

teraz działa jak urok!

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); 
}; 

Odpowiedz

1

W twoim kodzie jesteś zepsuty app.get zachowanie z jednym argumentem. Wypróbuj to:

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

Dzięki Vadim! Zorientowałem się po napisaniu pytania :) Zaktualizowałem też moje pytanie z rozwiązaniem, ale twoje jest znacznie lepsze. – user1796747

+0

po prostu nie interesuje ... co to za linia o 'app.listen (3131), vadim @ zapp: ~/workspace/test $ cat./Ex.js' ?? – Val

+0

@Val, to jest kopiowanie/wklejanie. Naprawiony. Dzięki. –

Powiązane problemy