【问题标题】:Node.js "require" function and parametersNode.js "require" 函数和参数
【发布时间】:2011-11-14 03:14:03
【问题描述】:

当我这样做时:

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”

标签: javascript node.js require


【解决方案1】:

当您拨打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 在我的回答后添加的部分:\
  • @JimSchubert 对不起舒伯特先生 :(
  • 然后从我的 nodejs 代码中实际导出我有module.exports = function(options) { ....; return { fn1, fn2 }}; 虽然有更好的方法吗?
【解决方案2】:

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

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

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

【讨论】:

  • 谢谢。我的错误是我忘记更改其中一个调用的参数数量。
  • 现在我明白了它是如何工作的。我剩下的问题现在是关于 JSON 错误的。大多数人只是通过浏览器进行调试吗?
  • 据我所知,大多数人使用util.inspect 来检查对象(这是在内部使用console.log 完成的)。您还可以使用节点检查器(请参阅 article 视频教程)。 node-inspector 是监听 node --debug 的 webkit 检查器(如 Chrome 中的 CTRL+SHIFT+J)。
  • @SohailSi 这是一种防止任何程序错误的方法(例如,如果有人将新对象绑定到exportsmodule.exports)。有关详细信息,请参阅stackoverflow.com/a/13622513/151445
  • 感谢@JimSchubert 的教育评论。
猜你喜欢
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 2015-05-17
相关资源
最近更新 更多