2012-03-27 61 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 Auction分配给exports的财产Auction

+1

完美 - 谢谢! – dzm 2012-03-27 16:36:50

+2

对我来说,它只适用于我'需要'('./ lib/auction')。Auction();'带圆括号,任何想法为什么? – 2015-01-07 16:40:19