Функция module.exports не определена при передаче переменной - PullRequest
2 голосов
/ 12 января 2012

В моем приложении 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 ]

3 голосов
/ 12 января 2012

require('../controllers/controller') - это функция.Когда вы используете его без ключевого слова new, оно ничего не возвращает.Но когда вы используете new function(), он действует как конструктор объекта.Поэтому вам нужно использовать ключевое слово new, если вам нужно, чтобы объект возвращался с методами-прототипами.

var Controller = require('../controllers/controller'),
controller = new Controller(variable);
1 голос
/ 12 марта 2014

это старая ветка, но у меня была эта проблема, и принятый ответ мне не помог.

Чтобы создать модуль с параметром, я использую этот код:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...