2012-03-27 32 views
14

Bir node.js uygulaması için oluşturduğum bir modül var. Uygulama ayrıca socket.io kullanıyor ve ben yarattığımda socket.io nesnesini açık artırma nesnesine aktarmak istiyorum.Node.js nesnesi bir işlev değil - module.exports

Bu, Düğüm dışında yaptığımda çalışır, ancak içimde, 'nesne bir işlev değil' hatasını alırım - benim tahminim bunun, module.exports ile ilgisi var, ama eminim ne yapacağını olmak.

Herhangi bir öneri harika olurdu - teşekkürler!

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: Modülü Gerektiğinde Sen 1 mülk Auction

ile bir nesne ihraç edilmektedir

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)

cevap

34

, ithal bir

gibi görünen nesne
{ 
    Auction: function(){...}// Auction function 
} 

Yani ihracat sadece fonksiyon ya:

module.exports = Auction; 

veya modül gerektiğinde özelliğini referans: {}

: Varsayılan olarak

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

, module.exports boş nesnedir

exports'u bir işlevle değiştirebilirsiniz. Bu sadece bu işlevi dışa aktarır. Veya exports'a atayarak birçok işlevi, değişken ve nesneyi dışa aktarabilirsiniz. Sorunuzda yaptığınız iş budur: function Auction, exports'un Auction numaralı özelliğine atanmıştır.

+1

Kusursuz - teşekkürler! – dzm

+2

Benim için sadece i 'gerektirir (' ./ lib/açık artırma ') Müzayede(); 'parantez ile, herhangi bir fikir neden? –