模块函数在外部脚本中显示为未定义

时间:2018-01-17 13:29:56

标签: javascript node.js node-modules

此代码告诉我解析函数不是函数:

const  MyModule = require('./MyModule.js');

MyModule.parse('...');

在我的模块脚本中,它的定义如下:

MyModule = {};

MyModule.parse = function(data){

};


module.exports.MyModule = MyModule;

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您必须了解您不是使用名为MyModule的成员导出MyModule而是导出对象(module.exports确切)(这是您为其分配的)。

如果在您的代码中需要MyModule,则console.log是您需要的结果,它将如下所示:

{ MyModule: {parse: [Function] } }

这是一个module.exports对象,它有一个名为MyModule的属性(对象),它有一个名为parse的属性(函数)。

因此,当您需要获取分配了MyModule而不仅仅是MyModule的module.exports对象时。

如果您要将module.exports代码更改为:

module.exports.X = MyModule;

您需要MyModule的代码会记录:

{ X: {parse: [Function] } }

你会把它称为

MyModule.X.parse(...).

如果您随后将代码更改为

const MyFabulousModule = require('./MyModule'); 
然后你会把它称为:

MyFabulousModule.X.parse(...);

最后,如果您在模块中添加了另一行:

module.exports.Y = 4;

然后在您的通话代码中添加:

console.log(MyFabulouseModule.Y);

你会看到值4登录到控制台。

代码:

<强> MyModule.js

const MyModule = {};
MyModule.parse = function(data) {
    console.log(data);
};

module.exports.X = MyModule;
module.exports.Y = 4;

<强> test.js

const MyModule = require("./MyModule");

console.log(MyModule);

MyModule.X.parse("hello world");

console.log(MyModule.Y);

运行:node test.js

答案 1 :(得分:0)

首先,您需要在定义对象中添加关键字。 const MyModule = {}; 并导出您指定为常量的对象,因此您需要从中调用对象,如下所示: MyModule.MyModule.parse('...')