Reputation: 7458
I have defined an http server by requiring as follows:
var http = require('http');
function onRequest(request, response) {
console.log("Request" + request);
console.log("Reponse" + response);
}
http.createServer(onRequest).listen(8080);
I would like to pass the http object to a JS class (in a separate file) where I load external modules that are specific to my application.
Any suggestions on how would I do this?
Thanks, Mark
Upvotes: 4
Views: 13510
Reputation: 11929
You don't need to pass the http object, because you can require it again in other modules. Node.js will return the same object from cache.
If you need to pass object instance to module, one somewhat dangerous option is to define it as global (without var keyword). It will be visible in other modules.
Safer alternative is to define module like this
// somelib.js
module.exports = function( arg ) {
return {
myfunc: function() { console.log(arg); }
}
};
And import it like this
var arg = 'Hello'
var somelib = require('./somelib')( arg );
somelib.myfunc() // outputs 'Hello'.
Upvotes: 15
Reputation: 7945
Yes, take a look at how to make modules: http://nodejs.org/docs/v0.4.12/api/modules.html
Every module has a special object called exports
that will be exported when other modules include it.
For example, suppose your example code is called app.js
, you add the line exports.http = http
and in another javascript file in the same folder, include it with var app = require("./app.js")
, and you can have access to http with app.http
.
Upvotes: 7