Node.js对象不是函数 - module.exports

时间:2012-03-27 16:21:07

标签: javascript node.js socket.io

我有一个我为node.js app创建的模块。该应用程序还使用socket.io,我想在创建它时将socket.io对象传递给拍卖对象。

当我在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);
  

错误:TypeError:object不是函数       at Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR(native)

1 个答案:

答案 0 :(得分:37)

您正在导出具有1个属性Auction

的对象

当您需要该模块时,您导入了一个类似于

的对象
{
  Auction: function(){...}// Auction function
}

所以要么只导出函数:

module.exports = Auction;

或在您需要模块时引用该属性:

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

默认情况下,module.exports是一个空对象:{}

您可以使用某个功能替换exports。这将导出该功能。

或者您可以通过将许多函数,变量和对象分配给exports来导出它们。这就是您在问题中所做的:将function Auction分配给Auction的{​​{1}}属性。