2012-03-27 17 views
14

Mam moduł I utworzony dla aplikacji node.js. Aplikacja używa również socket.io i chcę przekazać obiekt socket.io do obiektu aukcyjnego, gdy go utworzę.Obiekt Node.js nie jest funkcją - module.exports

Działa to, gdy robię to poza węzłem, ale wewnątrz, dostaję błąd "obiekt nie jest funkcją" - przypuszczam, że ma to związek z module.exports, ale jestem pewien, co by to było być.

Wszelkie sugestie będą niesamowite - dziękuję!

auction.js

var Auction = function(socket) { 
    this.data  = []; 
    this.timer  = null; 
    this.socket = socket; 
} 

Auction.prototype = { 

    add: function(auction) { 
     this.data.push(auction); 
    } 
} 


module.exports.Auction = Auction; 

server.js:

var Auction   = require('./lib/auction'); 

var auctions = new Auction(socket); 

Error: TypeError: object is not a function at Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR (native)

Odpowiedz

34

eksportowania obiektu z 1 mienia Auction

Gdy wymagany moduł, to importowany obiekt wyglądający jak

{ 
    Auction: function(){...}// Auction function 
} 

Więc albo eksport tylko funkcja:

module.exports = Auction; 

lub odwoływać się do właściwości, gdy wymaga modułu:

var Auction = require('./lib/auction').Auction; 

Domyślnie module.exports jest pusty obiekt: {}

Możesz zastąpić exports funkcją. Spowoduje to wyeksportowanie tylko tej funkcji.

Można również wyeksportować wiele funkcji, zmiennych, obiektów, przypisując je do exports. Oto, co zrobiłeś w swoim pytaniu: przypisano function Auction do nieruchomości Auction z exports.

+1

Idealny - dziękuję! – dzm

+2

Dla mnie działa tylko wtedy, gdy 'require ('./ lib/auction') .Aukcja();' z nawiasami, każdy pomysł, dlaczego? –