Javascript 自定义模块内的EventEmitter抛出';。on(…)不是一个函数';

Javascript 自定义模块内的EventEmitter抛出';。on(…)不是一个函数';,javascript,node.js,events,eventemitter,Javascript,Node.js,Events,Eventemitter,我想从我的Nodejs模块发出事件,但它没有按预期工作,因为我们收到一个错误: 未捕获类型错误:(…)上的Test.on不是函数 下面是模块test.js var util = require("util"); var EventEmitter = require("events").EventEmitter; function Test() { EventEmitter.call(this); } Test.prototype.test = function (inpu

我想从我的Nodejs模块发出事件,但它没有按预期工作,因为我们收到一个错误:
未捕获类型错误:(…)上的Test.on不是函数

下面是模块
test.js

var util         = require("util");
var EventEmitter = require("events").EventEmitter;

function Test() {
  EventEmitter.call(this);
}

Test.prototype.test = function (input) {
  this.emit("testevent", input);
};

util.inherits(Test, EventEmitter);

module.exports = Test;

index.js
中,我们有以下内容:

const Test = new (require('./test.js'));
Test.on('testevent', function (test) {
  console.log('emitted', test);
});
// Test.test('input');
我只知道
index.js
中的代码不应该发出事件,因为
Test.Test('input')未被调用

然而,由于该行被禁用,我不明白为什么我会得到
未捕获的TypeError:Test.on(…)不是一个函数


一旦
Test.Test('input'),错误就会消失
未注释,事件似乎会发出,因为我可以看到记录的行。但是为什么呢?如果线路被禁用,为什么会抛出该错误?我们做错了什么?

使用
const Test=new(require('Test.js')
您需要
test.js
来自
node_modules
的模块,其中有一个是因为您没有发现module_NOT_FOUND错误,但这是您真正需要的文件,或者这应该是具有reative path
const test=new(require('./test.js'))的本地文件

在取消对此行的注释后
Test.Test('input')这不太可能记录任何内容,因为此代码发出
test
事件,并且您的代码仅侦听
testevent


总的来说,这段代码运行良好,下面是一个示例

Oops,它们是打字错误。我编辑了这个问题以反映问题,但事实上我们需要一个相对路径
/test.js
,事件名称也是一个输入错误。它应该是
testevent
。有了这些更改,这会有什么不同吗?正如您在repl上的示例中所看到的。如果此代码没有问题,如果您仍然有问题,请提供有关您的环境的信息,如节点版本、操作系统。