Node.js object is not a function - module.exports


Question

I have a module I created for a node.js app. The app also uses socket.io and I want to pass the socket.io object into the auction object when I create it.

This works when I do it outside of Node, but inside, I get the error 'object is not a function' - my guess is it has to do with the module.exports, but I'm sure what it would be.

Any suggestions would be awesome - thank you!

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);

Error: TypeError: object is not a function at Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR (native)

1
17
3/27/2012 4:21:07 PM

Accepted Answer

You are exporting an object with 1 property Auction

When you required the module, you imported an object which looks like

{
  Auction: function(){...}// Auction function
}

So either export just the function:

module.exports = Auction;

or reference the property when you require the module:

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

By default, module.exports is an empty object : {}

You can replace exports with a function. This will export just that function.

Or you can export many functions, variables, objects, by assigning them to exports. This is what you have done in your question: assigned the function Auction to the property Auction of exports.

37
3/27/2012 4:31:20 PM

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon