2012-11-03 11 views
6

Sto provando ad estendere il comportamento app.get ma sembra che dopo averlo fatto, l'app abbia perso alcune configurazioni prima di estenderla.Estendere il metodo express app.get in un'app di nodejs

Nel seguente frammento del /campione e /es/campione uscita sono vuoti e l'output previsto dovrebbe essere 'valore'

sto facendo qualcosa di sbagliato?

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

dispiace, io risponderò io stesso ...

ho perso la seguente prima riga del metodo di estensione :)

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

ora funziona come un fascino!

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

risposta

1

Nel codice si è rotto il comportamento app.get con un argomento. Prova questo:

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

Grazie Vadim! Ho capito dopo aver scritto la domanda :) Ho anche aggiornato la mia domanda con la soluzione ma la tua è molto meglio. – user1796747

+0

appena fuori interesse ... qual è questa linea tutto su 'app.listen (3131); vadim @ zapp: ~/workspace/test $ cat./Ex.js' ?? – Val

+0

@Val, questa è la duplicazione copia/incolla. Fisso. Grazie. –

Problemi correlati