2012-03-27 15 views
14

Tengo un módulo que creé para una aplicación node.js. La aplicación también usa socket.io y quiero pasar el objeto socket.io al objeto de la subasta cuando lo creo.El objeto Node.js no es una función - module.exports

Esto funciona cuando lo hago fuera de Node, pero adentro, aparece el error 'el objeto no es una función' - mi suposición es que tiene que ver con el módulo .exports, pero estoy seguro de lo que sería ser.

Cualquier sugerencia sería increíble, ¡gracias!

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)

Respuesta

34

está exportando un objeto con la propiedad 1 Auction

Cuando se requiere el módulo, que importan una objeto que se parece a

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

Así que, o simplemente la función de exportación:

module.exports = Auction; 

o hacer referencia a la propiedad en caso de requerir el módulo:

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

Por defecto, module.exports es un objeto vacío: {}

Puede reemplazar exports con una función. Esto exportará solo esa función.

O puede exportar muchas funciones, variables, objetos, asignándolos a exports. Esto es lo que ha hecho en su pregunta: ha asignado el function Auction a la propiedad Auction de exports.

+1

Perfecto - ¡gracias! – dzm

+2

Para mí solo funciona si 'requiero ('./ lib/auction'). Auction();' con paréntesis, ¿alguna idea de por qué? –

Cuestiones relacionadas