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

dzm*_*dzm 18 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;
Run Code Online (Sandbox Code Playgroud)

server.js:

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

var auctions = new Auction(socket);
Run Code Online (Sandbox Code Playgroud)

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

The*_*Who 37

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

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

{
  Auction: function(){...}// Auction function
}
Run Code Online (Sandbox Code Playgroud)

所以要么只导出函数:

module.exports = Auction;
Run Code Online (Sandbox Code Playgroud)

或在您需要模块时参考该物业:

var  Auction = require('./lib/auction').Auction;
Run Code Online (Sandbox Code Playgroud)

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

您可以exports使用功能替换.这将只导出该功能.

或者您可以通过分配它们来导出许多函数,变量和对象exports.这是你在你的问题做了什么:分配function Auction的财产Auctionexports.

  • 对我来说,它只有在我需要('./ lib/auction')时才有效.拍卖();`带圆括号,知道为什么? (2认同)