2011-09-09 43 views
58

当我这样做:Node.js的 “需要” 的功能和参数

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" 
+0

你传递的变量是什么?他们是否被声明和定义? –

回答

82

当你调用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) { } 
+0

+1对于回答OP中添加的部分后我的回答:\ –

+0

@JimSchubert对不起先生舒伯特:( – Raynos

+10

只是嫉妒,因为你的回答更正确:( –

18

你可能有你想在传递一个明确的值

就拿,requires.js

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

当y欧正确地调用它,它的工作原理:

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

+0

现在我明白了它的工作原理,我现在的问题是关于JSON错误,大多数人只是通过浏览器进行调试吗? – user885355

+0

据我所知,大多数人使用'util.inspect'来检查对象(这是用'console.log'内部完成的)。您还可以使用节点检查器(有关视频教程,请参阅[文章](http://howtonode.org/debugging-with-node-inspector))。 node-inspector是webkit检查器(例如Chrome中的CTRL + SHIFT + J),它侦听'node --debug'节点。 –