2013-05-14 10 views
10

Ich benutze Restify mit Nodejs und ich habe eine Frage über die richtige Art und Weise der Rückgabe der Kontrolle an die nächste Middleware im Stapel. Ich hoffe, dass ich den richtigen Satz verwende, wenn ich "nächste Middleware im Stapel" sage.Restify Middleware - korrekte nächste Middleware im Stack

Grundsätzlich sieht mein Code wie folgt aus:

//server is the server created using Restify 
server.use(function (req, res, next) { 
    //if some checks are a success 
    return next(); 
}); 

Nun, was ich wissen möchte, ist der Code sollte return next(); sein oder sollte es nur next(); sein, die Kontrolle auf die nächste im Stapel zu übergeben?

Ich überprüfte und beide funktionieren - das heißt, beide Teile des Codes werden die Kontrolle erfolgreich übergeben und die Daten wie erwartet zurückgeben - was ich wissen möchte ist, ob es einen Unterschied zwischen den beiden gibt und wenn ich einen über den anderen benutzen muss .

Antwort

17

Es gibt keinen Unterschied. Ich habe mir die Restify-Quelle angeschaut und sie scheint überhaupt nichts mit dem Rückgabewert einer Middleware zu tun.

Der Grund für return next() Verwendung ist rein eine Frage der Bequemlichkeit:

// using this... 
if (someCondition) { 
    return next(); 
} 
res.send(...); 

// instead of... 
if (someCondition) { 
    next(); 
} else { 
    res.send(...); 
}; 

Es hilft Fehler wie dies zu verhindern könnten:

if (someCondition) 
    next(); 
res.send(...); // !!! oops! we already called the next middleware *and* we're 
       //  sending a response ourselves! 
+1

Hallo, können Sie mir antworten zu 'Was in der nächsten Rückruf tun HTTP-Handler? server.get ('/', function (req, res, next) {res.end();}) 'Soll ich auch als nächstes anrufen? –

+1

@vp_arth Wenn Sie die Anfrage nicht durch Senden einer Antwort auf die eine oder andere Weise beenden, können Sie 'next()' verwenden, um die Steuerung an die nächste route/middleware/(error-) Behandlungsroutine zu übergeben – robertklep