传入变量时,module.exports函数未定义

时间:2012-01-11 20:47:39

标签: javascript node.js express

在我的Node.js应用程序中,我使用require将变量传递给函数,如下所示:

console.log(require('../controllers/controller')(variable)); // undefined

但是,当我没有传入变量时,它会记录为一个函数,如下所示:

console.log(require('../controllers/controller')); // [Function]

我的控制器定义如下:

var Controller = function (variable) {
  this.variable = variable;
};

Controller.prototype.method = function (someInput, callback) {
  // can access this.variable;
};

module.exports = Controller;

我也遇到了这个错误:

TypeError: Object function (variable) {
  this.variable = variable;
} has no method 'method'

知道我在哪里出错吗?我坚持这一步,不知道如何进一步调试。

2 个答案:

答案 0 :(得分:3)

require('../controllers/controller')是一个功能。如果在没有new关键字的情况下使用它,则不会返回任何内容。但是当你使用new function()时,它就像对象的构造函数。所以你想要做的是使用new关键字,如果你需要用它的原型方法返回一个对象。

var Controller = require('../controllers/controller'),
controller = new Controller(variable);

答案 1 :(得分:1)

这是一个老话题,但我遇到了这个问题,接受的答案对我没有帮助。

要创建带参数的模块,我使用以下代码:

module.exports = function(pName) {
  return {
    test1: function() {
       console.log('In test 1 '+pName);
    },
    test2: function() {
       console.log('In test 2 '+pName);
    }
  };
};

调用模块的功能:

var testModule = require('testModule')('David');
testModule.test1();
testModule.test2();