我有一个我为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)
答案 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}}属性。