【问题标题】:nodejs module does not export functionnodejs模块不导出功能
【发布时间】: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


【解决方案1】:

这绝对应该有效:

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());

让我想知道的是你上面的一个 cmets,你得到一个错误libs is not defined。看起来您之前应该有其他未被注意到的错误.. 在您的 shared.libs 模块的初始化期间..

【讨论】:

  • 这确实有效,但正如我所提到的,我需要解决方案,我不需要检查所有更改 require 部分的文件。所以如果它像var libs = require('shared.libs'); var config = libs.config; 那么它应该保持这种状态。我想要的只是能够调用 libs 对象,它给了我undefined
  • 界面保持原样完美。更新了我帖子中的参考示例以向您展示
  • 我试过这个,但似乎不起作用。我仍然收到libs is not defined。这很尴尬。
  • 如果你想让我看看,发给我这个“shared.lib”
猜你喜欢
  • 2018-05-06
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2021-10-12
  • 2016-09-20
相关资源
最近更新 更多