Node.js "требуют" функции и параметры - PullRequest
67 голосов
/ 10 сентября 2011

Когда я делаю:

lib = require('lib.js')(app)

действительно ли app передается?

в lib.js:

exports = module.exports = function(app){}

Похоже, нет, поскольку, когда я пытаюсь сделать больше, чем просто (app), а вместо этого сделать:

lib = require('lib.js')(app, param2)

И

exports = module.exports = function(app, param2){}

Я не понимаю params2.

Я попытался отладить, выполнив:

params = {}
params.app = app
params.param2 = "test"

lib = require("lib.js")(params)

но в lib.js при попытке JSON.stringify я получаю эту ошибку:

"DEBUG: TypeError: Converting circular structure to JSON"

Ответы [ 2 ]

100 голосов
/ 10 сентября 2011

Когда вы вызываете lib = require("lib.js")(params)

Вы на самом деле вызываете lib.js с одним параметром, содержащим два свойства name app и param2

Вы либо хотите

// somefile
require("lib.js")(params);
// lib.js
module.exports = function(options) {
  var app = options.app;
  var param2 = options.param2;
};

или

// somefile
require("lib.js")(app, param2)
// lib.js
module.exports = function(app, param2) { }
18 голосов
/ 10 сентября 2011

У вас может быть неопределенное значение, которое вы пытаетесь передать.

Например, requires.js:

module.exports = exports = function() {
   console.log('arguments: %j\n', arguments);
};

Когда вы вызываете его правильно, оно работает:

node
> var requires = require('./requires')(0,1,2,3,4,5);
arguments: {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5}

Если у вас есть синтаксическая ошибка, она завершится ошибкой:

> var requires = require('./requires')(0,);
... var requires = require('./requires')(0,2);
... 

Если у вас есть неопределенный объект, он не будет работать:

> var requires = require('./requires')(0, undefined);
arguments: {"0":0}

Итак, я сначала проверил бы, правильно ли определен ваш объект (и правильно написан при его передаче), а затем проверил, что у вас нет синтаксических ошибок.

...