2012-08-30 16 views
2

我是Node.js的新手,想弄清楚如何從一個單獨的文件請求一個對象(而不是僅僅請求一個函數),但是我嘗試的所有東西 - exports,module-exports等 - 都失敗了。在Node.JS中,如何從單獨的.js文件返回整個對象?

因此,舉例來說,如果我有foo.js

var methods = { 
        Foobar:{ 
          getFoo: function(){return "foo!!";}, 
          getBar: function(){return "bar!!";} 
        } 
        }; 
module.exports = methods; 

,現在我想從index.jsfoo.js對象中調用一個函數:

var m = require('./foo'); 
function fooMain(){ 
    return m.Foobar.getFoo(); 
}; 

我該怎麼辦呢?我嘗試了各種各樣的exportsmodule-exports的組合,但它們似乎只在我稱之爲不屬於對象一部分的離散函數時才起作用。

回答

4

你說你試過exports,但是你的代碼沒有顯示它。您希望從模塊外部可見的任何內容都必須分配給module.exports(或以其他方式參考)。在你的情況,你有一個對象已經,你可以把它分配給module.exports

var methods = { 
    ... 
}; 

// You must export the methods explicitly 
module.exports = methods; 

module.exports不是魔術,這是一個正常的對象,你可以把它當作這樣的。這意味着你可以在直接分配你的方法給它,因爲:只有出口後

module.exports = function() { return "It's ALWAYS over 9000!!!!"; }; 

你會:

module.exports.Foobar = {}; 
module.exports.Foobar.getFoo = function() { ... }; 
... 

或者,正如你可能知道,你可能事件與函數替換能夠在另一個模塊中使用任何東西

+0

謝謝voithos!所以爲了確保我明白了,我需要明確地導出對象的每個部分(例如:'module.exports.Foobar.getFoo')?我試圖導出整個對象,然後使用點符號從'index.js'訪問它的組成部分。 –

+1

@MatthewPatrickCashatt:不,你不需要單獨做。正如我所說的,'module.exports'只是一個普通的對象。所以,是的,你可以只分配你的'方法'對象,一切都應該正常工作。我會修改我的答案,使其更加明確。 – voithos

+0

得到它的工作。謝謝你的幫助! –

相關問題