2012-10-09 85 views
2

我遇到了我的Nodejs應用程序的問題。 我有兩個不同的應用程序正在使用共享庫,該應用程序位於node_modules的上一級。所以我有這個結構./app1/app.js,./app2/app.js./node_modules/shared.libs/index.jsnodejs模塊不導出功能

shared.libs依次安裝了一些其他模塊,如貓鼬,redis等加上一些mogoose模型與其他功能。所有從index.js出口是這樣的:

exports.async = require('async'); 
exports.config = require('./config'); 
exports.utils = require('./lib/utils'); 

然後在我的應用程序導入它們是這樣的:

var libs = require('shared.libs'); 
var config = libs.config; 

所以這個代碼後,我可以使用config這是從共享庫的到來。 這部分是和正在工作得很好。但是現在我需要在這個庫的頂部添加額外的圖層(請參閱:爲這兩個應用程序提供更統一的界面)。 我試圖做的是在共享庫的index.js中添加一些函數,然後用這些函數導出整個對象。但每當我嘗試調用先前導入的(由var libs = require('shared.libs');)對象它說libs未定義。

我在這裏做錯了什麼?

我一般都想保持其他代碼一樣,所以我不需要再去替換require部分,但是同時從共享庫中提供額外的功能,這些功能可以從那個導入的libs對象中獲得。

+1

顯示更多的代碼 - 你如何試圖導出新的功能,其中是'require'不是工作等 –

+0

@IvanVergiliev我如何'出口'它的代碼,以及我如何'需要'是非常多的解釋。我怎麼能改進它?我試着直接導出函數如'exports.test = function(){console.log(「test」);}',然後從另一個地方'require',同時嘗試創建一個實現所有需要函數的新對象, '它。兩種方式都不起作用。每當我嘗試調用libs.test()時,它都會說我的libs是未定義的。每當我通過節點檢查器檢查libs對象,它給我相同的輸出。 – AlexKey

+1

所以,你只是說只要你有'exports.sth = require(module)',這就好,但如果你還添加'exports.fun = function(){}',整個模塊就會停止工作,這是正確的嗎?聽起來不太合適。 –

回答

5

這應該肯定的工作:

module.exports = { 
    async: require('async'), 
    config: require('./config'), 
    utils: require('./lib/utils'), 
    foo: function() { 
    return 'bar'; 
    } 
}; 

參考,如:

var libs = require('shared.libs'); 

console.log(libs.async); 
console.log(libs.config); 
console.log(libs.utils); 
console.log(libs.foo); 
console.log(libs.foo()); 

什麼讓我不知道是你的意見之一以上,你得到一個錯誤libs is not defined。這看起來像你之前應該有其他未被注意到的錯誤..在您的shared.libs模塊的初始化..

+0

這確實奏效,但正如我所提到的,我需要解決方案,我不需要遍歷所有文件,無處不在更改'require'部分。 因此,如果它像 'var libs = require('shared.libs');' 'var config = libs.config;' 那麼它應該保持這種狀態。我想要的只是能夠調用libs對象,它給了我'undefined' – AlexKey

+0

界面保持完美,因爲它是..更新參考示例在我的帖子向你展示 – lrsjng

+0

我試過這個,但似乎不工作。我仍然在'libs未定義'。這是尷尬的。 – AlexKey