2012-10-09 73 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