【问题标题】:module.exports function undefined when passing in a variable传入变量时,module.exports 函数未定义
【发布时间】:2012-01-11 20:47:38
【问题描述】:

在我的 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'

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

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

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

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

    【讨论】:

    • 哇,这是一个愚蠢的错误。编辑您的答案,以准确显示我应该为其他犯同样愚蠢错误的人做些什么。
    【解决方案2】:

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

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

    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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多