2011-09-09 70 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'節點。 –