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

18

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

在Node外部进行此操作时可以正常工作,但在内部,我会收到错误“object is not a function”- 我猜测这与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;

服务器.js:

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

var auctions = new Auction(socket);

错误:类型错误:对象不是函数 在Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR(本地)

1个回答

38

你正在导出一个具有1个属性 Auction 的对象。

当你需要该模块时,你导入了一个对象,它看起来像这样

{
  Auction: function(){...}// Auction function
}
所以要么只导出这个函数:
module.exports = Auction;

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

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

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

你可以用一个函数替换exports。这样只会导出该函数。

或者你可以通过将它们赋值给exports来导出多个函数、变量、对象。这就是你在问题中所做的:将function Auction赋值给exportsAuction属性。


2
对我来说,只有在使用括号 require('./lib/auction').Auction(); 时才能正常工作,有什么想法为什么? - Tim
@Tim,根据你的情况,require('./lib/auction')。Auction返回一个函数,你必须添加括号调用该函数才能执行它。 - the_haystacker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接