【问题标题】:Node.js object is not a function - module.exportsNode.js 对象不是函数 - module.exports
【发布时间】:2012-04-11 05:22:07
【问题描述】:

我有一个为 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);

错误:TypeError:对象不是函数 在 Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR(本机)

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

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

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

    的对象
    {
      Auction: function(){...}// Auction function
    }
    

    所以要么只导出函数:

    module.exports = Auction;
    

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

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

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

    您可以将exports 替换为函数。这将只导出该函数。

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

    【讨论】:

    • 对我来说,它只有在我 require('./lib/auction').Auction(); 带括号时才有效,知道为什么吗?
    • @Tim,在您的情况下,require('./lib/auction').Auction 返回一个函数,您必须通过添加括号来调用该函数来执行它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2019-09-03
    • 1970-01-01
    相关资源
    最近更新 更多