10

我有2个文件:

开始.js

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

对话.js

    var ConversationModule = new Object();

    ConversationModule.sayhello = function () {
    console.log("hello");
    };

    exports.ConversationModule = ConversationModule();

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

TypeError: object is not a function

我只是不明白为什么它不起作用 - 我是节点新手 :)

4

3 回答 3

11

您正在尝试导出ConversationModule为函数,但事实并非如此。改用这个:

exports.ConversationModule = ConversationModule;

由于您还将变量分配为 的属性exports,因此您必须像这样调用它:

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

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

module.exports = ConversationModule;

并这样称呼它:

var ConversationModule = require('./file');
ConversationModule.sayhello();
于 2013-10-19T19:27:13.637 回答
0

对话.js:

var conversationModule = new Object();

conversationModule.sayhello = function () {
console.log("hello");
};

exports.conversationModule = conversationModule;

开始.js:

var conversationModule =  require('./src/classes/conversation/Conversation.js').conversationModule;
conversationModule.sayhello();
于 2014-12-21T07:05:01.097 回答
0

鉴于您已将文件命名为 conversation.js,您可能打算仅在该特定文件中定义“对话模块”。(每个逻辑模块一个文件是一个很好的做法)在这种情况下,更改导出代码并保留原始代码会更干净。

开始.js

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

对话.js

   var ConversationModule = new Object();

   ConversationModule.sayhello = function () {
     console.log("hello");
   };

   module.exports = ConversationModule;

当您module.exports需要带有require.

于 2013-10-19T21:32:36.520 回答