2013-10-19 13 views
7

Ho ottenuto 2 file:node.js includono file di classe

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(); 

In start.js non posso chiamare il metodo sayHello() . Ottengo seguente errore

TypeError: object is not a function 

io proprio non capisco il motivo per cui non funziona - Sono nuovo al nodo :)

risposta

10

Si sta tentando di esportare ConversationModule come una funzione, che è non. Usare questo invece:

exports.ConversationModule = ConversationModule; 

Dal momento che si sta anche assegnare la variabile come una proprietà di exports, dovreste chiamare in questo modo:

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

Se non si vuole fare che, assegnare l'oggetto a module.exports:

module.exports = ConversationModule; 

E chiamare in questo modo:

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

Dato che hai denominato il file conversation.js, probabilmente intendi definire solo il "modulo di conversazione" in quel particolare file. (Un file per modulo logico è una buona pratica) In tal caso, sarebbe più pulito cambiare il codice di esportazione e lasciare il codice richiesto come lo avevi in ​​origine.

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; 

Assegnazione qualcosa da module.exports rende questo valore disponibile quando si richiede il modulo con require.

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();