I\'m reading Node.js Connect version 2.15.0:
/**
* Create a new connect server.
*
* @return {Function}
* @api public
*/
function createServer() {
functio
app.handle
seems to be provided in proto, since there isapp.handle
defined in proto.js. So, this is a use of a closure, andapp.handle
is defined not at the time Node parsesfunction app()
but later on in the code? Alsoapp
itself is defined in..uh..function app()
. The code seems funny to me.
Yes, app.handle
comes from proto
. But no, accessing app
inside the app
function is not a closure, a function is available by its name in all function declarations.
2. When is
function app()
invoked? All I knowcreateServer
creates the server. So when would I be invoking that function and how?
The connect docs use this example code:
var app = connect();
…
http.createServer(app).listen(3000);
You can see that connect
(which is the createServer
function you posted) does create the app
, which is passed as a handler to the actual http server.
3. Is
utils.merge()
a common practice instead of inheritance or what? It looks likemixin
to me.
Yes, merge
does mixin one object into the other. This is done to extend the function object app
with all the necessary methods. It is necessary because it is impossible to Define a function with a prototype chain in a standard way. They might have used something along these lines as well:
app.__proto__ = utils.merge(Object.create(EventEmitter.prototype), proto);
but then app
wouldn't any longer be instanceof Function
; and have no function methods.