Node.js“需要”功能和参数


75

当我做:

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"

您传入的变量是什么?是否声明和定义了它们?
萨米尔·塔尔瓦尔

你知道了吗?像您描述中的拼写错误。“ params?2”
Mike Mestnik,

Answers:


115

你打电话的时候 lib = require("lib.js")(params)

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

你要么想要

// 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回答OP在我的回答后添加的部分:\
Jim Schubert

@JimSchubert对不起,舒伯特先生:(
雷诺斯2011年

然后从我的nodejs代码中获取实际的导出内容,module.exports = function(options) { ....; return { fn1, fn2 }}; 虽然有更好的方法,但是可以正常工作吗?
HankCa

19

您可能要传递一个未定义的值。

例如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}

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


1
谢谢。我的错误是我忘记更改其中一个调用的参数数量。
user885355 2011年

现在,我了解了它的工作原理。我剩下的问题现在是关于JSON错误。大多数人都只是通过浏览器调试吗?
user885355 2011年

据我所知,大多数人util.inspect用来检查对象(这是在内部完成的console.log)。您也可以使用node-inspector(请参阅视频教程文章)。node-inspector是webkit检查器(类似于Chrome中的CTRL + SHIFT + J),它侦听node --debug
Jim Schubert

1
@SohailSi这是一种防止任何程序错误的方法(例如有人将新对象绑定到exportsmodule.exports)。有关更多详细信息,请参见stackoverflow.com/a/13622513/151445
吉姆·舒伯特

1
谢谢@JimSchubert的教育评论。
Sohail Si
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.