Sto costruendo un'applicazione Node.js con Connect/Express.js e voglio intercettare il (, vista opzionale) la funzione res.render per eseguire del codice prima di inoltrarlo al funzione originale di rendering.Node.js/Express.js - Come sovrascrivere/intercettare la funzione res.render?
app.get('/someUrl', function(req, res) {
res.render = function(view, options, callback) {
view = 'testViews/' + view;
res.prototype.render(view, options, callback);
};
res.render('index', { title: 'Hello world' });
});
Sembra un esempio forzato, ma si inserisce in un quadro generale che sto costruendo.
La mia conoscenza della programmazione orientata agli oggetti e ereditarietà prototipale su JavaScript è un po 'debole. Come potrei fare qualcosa di simile?
Aggiornamento: Dopo alcuni esperimenti mi si avvicinò con il seguente:
app.get('/someUrl', function(req, res) {
var response = {};
response.prototype = res;
response.render = function(view, opts, fn, parent, sub){
view = 'testViews/' + view;
this.prototype.render(view, opts, fn, parent, sub);
};
response.render('index', { title: 'Hello world' });
});
Sembra funzionare. Non sono sicuro che sia la soluzione migliore perché sto creando un nuovo oggetto wrapper di risposta per ogni richiesta, sarebbe un problema?
Questo è normalmente il modo in cui lo si fa. Se lo metti in un middleware che viene utilizzato prima del router, puoi configurarlo in un unico posto. –
Ho pensato di utilizzare il middleware. Non sono sicuro se voglio sovrascrivere il comportamento di risposta per l'intera applicazione, solo per le richieste che vengono instradate attraverso il mio framework. –