node.js包含类文件

我有2个文件:

start.js

var ConversationModule = require('./src/classes/conversation/Conversation.js'); ConversationModule.sayhello(); 

conversation.js

  var ConversationModule = new Object(); ConversationModule.sayhello = function () { console.log("hello"); }; exports.ConversationModule = ConversationModule(); 

在start.js中,我不能调用sayhello()方法。 我得到以下错误

 TypeError: object is not a function 

我只是不明白为什么它不起作用 – 我是新来的节点:)

您正尝试将ConversationModule导出为函数,但不是。 用这个代替:

 exports.ConversationModule = ConversationModule; 

既然你也将variables赋值为exports的属性,你必须像这样调用它:

 var ConversationModule = require('./file').ConversationModule; ConversationModule.sayhello(); 

如果您不想这样做,请将该对象分配给module.exports

 module.exports = ConversationModule; 

并像这样调用它:

 var ConversationModule = require('./file'); ConversationModule.sayhello(); 

鉴于你已经命名了文件conversation.js,你可能打算在这个特定的文件中单独定义“对话模块”。 (每个逻辑模块一个文件是一个好的做法)在这种情况下,更改您的导出代码会更干净,并且保留原来需要的代码。

start.js

 var ConversationModule = require('./src/classes/conversation/Conversation.js'); ConversationModule.sayhello(); 

conversation.js

  var ConversationModule = new Object(); ConversationModule.sayhello = function () { console.log("hello"); }; module.exports = ConversationModule; 

当你需要带有require的模块时,给module.exports分配一些东西使得这个值可用。

conversation.js:

 var conversationModule = new Object(); conversationModule.sayhello = function () { console.log("hello"); }; exports.conversationModule = conversationModule; 

start.js:

 var conversationModule = require('./src/classes/conversation/Conversation.js').conversationModule; conversationModule.sayhello();