我有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
我只是不明白为什么它不起作用 - 我是节点的新手:)
答案 0 :(得分:11)
您正尝试将ConversationModule
导出为函数,而不是。请改用:
exports.ConversationModule = ConversationModule;
由于您还要将变量指定为exports
的属性,因此您必须将其称为:
var ConversationModule = require('./file').ConversationModule;
ConversationModule.sayhello();
如果您不想这样做,请将对象指定给module.exports
:
module.exports = ConversationModule;
并称之为:
var ConversationModule = require('./file');
ConversationModule.sayhello();
答案 1 :(得分:0)
鉴于您已将文件命名为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;
当您需要具有module.exports
的模块时,为require
分配内容可使此值可用。
答案 2 :(得分:0)
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();