【发布时间】:2012-10-15 19:34:46
【问题描述】:
我的 Nodejs 应用程序遇到了问题。
我有两个不同的应用程序正在使用共享库,它们的位置是为了在 node_modules 中找到上一层。所以我有这个结构./app1/app.js、./app2/app.js 和./node_modules/shared.libs/index.js。
shared.libs 又安装了一些其他模块,例如 mongoose、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 获得对象。
【问题讨论】:
-
显示更多代码 - 您是如何尝试导出新函数的,
require在哪里不起作用,等等。 -
@IvanVergiliev 我如何
export它和我如何require的代码已经解释得很清楚了。我该如何改进它?我尝试过直接导出函数,如exports.test = function(){console.log("test");},然后从另一个地方导出require,还尝试创建实现所有需要的函数的新对象和export。两种方式都行不通。每当我尝试调用 libs.test() 时,它都会告诉我 libs 未定义。每当我通过节点检查器检查 libs 对象时,它都会给我相同的输出。 -
所以,你是说只要你只有
exports.sth = require(module)就可以了,但是如果你还加上exports.fun = function() {},整个模块就停止工作了,对吗?听起来不太对劲。 -
@IvanVergiliev 不,如果添加
exports.fun = function(){},这个唯一的功能不起作用。但是在该共享库中导出的所有其他内容仍然有效。我的意思是奇怪的行为,如果我检查 lib 本身它是未定义的。 -
也许您应该尝试找出能够重现您所看到的错误的最少代码量。然后您可以自己看到问题,因为代码会少得多,或者您可以在此处发布代码并获得更好的答案。
标签: node.js