Node.js“require”函数和参数

时间:2011-09-09 21:50:50

标签: javascript node.js require

当我这样做时:

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)

但是当我尝试JSON.stringify时,我在lib.js中收到此错误:

"DEBUG: TypeError: Converting circular structure to JSON"

2 个答案:

答案 0 :(得分:97)

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

您实际上是使用一个包含两个属性名称lib.jsapp

的参数调用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) { }

答案 1 :(得分:18)

您可能有一个未定义的值,您尝试传入。

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}

因此,我首先检查您的对象是否已正确定义(并在传入时正确拼写),然后检查您是否没有语法错误。