Prima di tutto un percorso in espresso è il middleware come definito in connect. La differenza tra Express e altri framework è che il middleware si trova principalmente di fronte al controller e il controller termina la risposta. Un altro motivo per cui express utilizza il middleware è dovuto alla natura di Node.js asincrona.
Consente di visualizzare l'aspetto di un controller in Javascript.
var Controller = function() { };
Controller.prototype.get = function (req, res) {
find(req.param.id, function (product) {
res.locals.product = product;
find(res.session.user, function (user) {
res.locals.user = user;
res.render('product');
});
});
};
La prima cosa che probabilmente nota su questa azione è ottenere i callback nidificate. È difficile da testare, difficile da leggere e se hai bisogno di modificare i contenuti devi armeggiare con il tuo rientro. Quindi cerchiamo di risolvere questo problema utilizzando il controllo di flusso e rendilo piatto.
var Controller = function() { };
Controller.prototype.update = function (req, res) {
var stack = [
function (callback) {
find(req.param.id, function (product) {
res.locals.product = product;
callback();
});
},
function (callback) {
find(res.session.user, function (user) {
res.locals.user = user;
callback();
});
}
];
control_flow(stack, function (err, result) {
res.render('product');
});
}
In questo esempio è possibile estrarre tutte le diverse funzioni dello stack e testarli o anche loro riutilizzo per diversi itinerari. Avrai notato che la struttura del flusso di controllo assomiglia molto al middleware. Quindi, consente di sostituire lo stack con il middleware nel nostro percorso.
app.get('/',
function (req, res, next) {
find(req.param.id, function (product) {
res.locals.product = product;
next();
});
},
function (req, res, next) {
find(res.session.user, function (user) {
res.locals.user = user;
next();
});
},
function (req, res, next) {
res.render('product');
}
);
Così, mentre potrebbe essere tecnicamente possibile avere controllori in express.js si sarebbe probabilmente essere costretti ad utilizzare strutture di controllo del flusso, che alla fine è lo stesso di middleware.