我有一个为node.js应用程序创建的模块。该应用程序还使用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);

最佳答案

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

当您需要该模块时,您导入了一个看起来像

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

因此,要么只导出函数:
module.exports = Auction;

或在需要模块时引用该属性:
var  Auction = require('./lib/auction').Auction;

默认情况下,module.exports是一个空对象:{}
您可以将exports替换为函数。这将仅导出该功能。

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

09-13 09:33