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

Javascript Node.js对象不是函数-module.exports,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我有一个为node.js应用程序创建的模块。该应用程序还使用socket.io,我希望在创建它时将socket.io对象传递到拍卖对象中 当我在节点外部执行此操作时,这会起作用,但在节点内部,我得到错误“object不是函数”-我猜这与module.exports有关,但我确定它会是什么 任何建议都会很棒-谢谢 auction.js var Auction = function(socket) { this.data = []; this.timer = nul

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

当我在节点外部执行此操作时,这会起作用,但在节点内部,我得到错误“object不是函数”-我猜这与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:对象不是函数 at Object.CALL_NON_FUNCTION_AS_构造函数(本机)


您正在导出具有1个属性的对象
拍卖

当您需要该模块时,您导入了一个如下所示的对象

{
  Auction: function(){...}// Auction function
}
因此,要么只导出函数:

module.exports = Auction;
或在需要模块时引用属性:

var  Auction = require('./lib/auction').Auction;
默认情况下,module.exports是空对象:
{}

您可以使用函数替换导出。这将仅导出该函数


或者,您可以将许多函数、变量和对象指定给
导出
,以导出它们。这就是您在问题中所做的:将
功能拍卖
分配给
导出

拍卖
属性。对我而言,它仅在我
需要('./lib/Auction')时有效。Auction()
带括号,知道为什么吗?@Tim,在你的例子中,
require('./lib/auction')。auction
返回一个函数,你必须通过添加括号调用函数来执行它。