Javascript Node.js对象不是函数-module.exports
我有一个为node.js应用程序创建的模块。该应用程序还使用socket.io,我希望在创建它时将socket.io对象传递到拍卖对象中 当我在节点外部执行此操作时,这会起作用,但在节点内部,我得到错误“object不是函数”-我猜这与module.exports有关,但我确定它会是什么 任何建议都会很棒-谢谢 auction.jsJavascript 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
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
返回一个函数,你必须通过添加括号调用函数来执行它。