Totty.js
Totty.js

Reputation: 15831

How to require a file in node.js and pass an argument in the request method, but not to the module?

I have a module.js that must be loaded; In order to work needs objectX;

How do I pass the objectX to the module.js in the require method provided by node.js?

thanks

// my module.js
objectX.add('abc');
// error: objectX is undefined

I would like a way to do it, without having to change all my classes because would take a lot of time... and they way it is has good performance for the client side. (I mix clientfiles with serverfiles***)

Upvotes: 26

Views: 27029

Answers (3)

ChrisCantrell
ChrisCantrell

Reputation: 3853

You can avoid changing the actual exported object by chaining in an "init" method (name it whatever you want).

Module TestModule.js:

var x = 0; // Some private module data

exports.init = function(nx) {
    x = nx; // Initialize the data
    return exports;
};

exports.sayHi = function() {
    console.log("HELLO THERE "+x);
};

And then requiring it like this:

var TM = require('./TestModule.js').init(20);
TM.sayHi();

Upvotes: 16

kgilpin
kgilpin

Reputation: 2226

The module that you write can export a single function. When you require the module, call the function with your initialization argument. That function can return an Object (hash) which you place into your variable in the require-ing module. In other words:

main.js

var initValue = 0;
var a = require('./arithmetic')(initValue);
// It has functions
console.log(a);
// Call them
console.log(a.addOne());
console.log(a.subtractOne());

arithmetic.js:

module.exports = function(initValue) {
  return {
    addOne: function() {
      return initValue + 1;
    },
    subtractOne: function() {
      return initValue - 1;
    },
  }
}

Upvotes: 49

ladar
ladar

Reputation: 5876

What about workaround like export some init method and pass objectX as parameter right after requiring?

var module = require('moduleJS');
module.init(objectX)

Upvotes: 2

Related Questions