2012-03-27 15 views
14

node.jsアプリケーション向けに作成したモジュールがあります。このアプリケーションではsocket.ioも使用しています。作成するときにsocket.ioオブジェクトをオークションオブジェクトに渡したいとします。Node.jsオブジェクトは関数ではありません - module.exports

これはNodeの外で行うときに機能しますが、内部では、 'オブジェクトは関数ではありません'というエラーが表示されます。私の推測では、module.exportsと関係がありますが、さあ。

どのような提案もすばらしいでしょう - ありがとう!

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)

答えて

34

あなたはモジュールを必要とする場合、インポートした1つのプロパティAuction

でオブジェクトをエクスポートします外見は

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

だから、輸出だけで機能のいずれか:

module.exports = Auction; 

か、モジュール必要時にプロパティを参照:{}

:デフォルトでは

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

は、module.exportsは、空のオブジェクトであります

exportsを関数に置き換えることができます。これは、その関数だけをエクスポートします。

exportsに割り当てることで、多くの関数、変数、オブジェクトをエクスポートすることができます。あなたの質問ではこれが完了しました。function AuctionAuctionexportsというプロパティに割り当てました。

+1

完璧 - ありがとう! – dzm

+2

私のためには 'require( './lib/auction')。Auction();'かっこで、なぜか? –

関連する問題