2011-09-09 21 views
58

Cuando hago:Node.js "requieren" la función y los parámetros

lib = require('lib.js')(app) 

se app realidad geting aprobada en?

en lib.js:

exports = module.exports = function(app){} 

parece que no, ya que cuando trato de hacer algo más que (app) y en lugar de hacerlo:

lib = require('lib.js')(app, param2) 

Y:

exports = module.exports = function(app, param2){} 

No obtengo params2.

He tratado de depuración haciendo:

params = {} 
params.app = app 
params.param2 = "test" 

lib = require("lib.js")(params) 

pero en lib.js cuando intento JSON.stringify consigo este error:

"DEBUG: TypeError: Converting circular structure to JSON" 
+0

¿Cuáles son las variables que está pasando? ¿Están declarados y definidos? –

Respuesta

82

Cuando se llama a lib = require("lib.js")(params)

En realidad, está llamando al lib.js con un parámetro que contiene dos propiedades, nombre app y param2

O lo desee

// somefile 
require("lib.js")(params); 
// lib.js 
module.exports = function(options) { 
    var app = options.app; 
    var param2 = options.param2; 
}; 

o

// somefile 
require("lib.js")(app, param2) 
// lib.js 
module.exports = function(app, param2) { } 
+0

+1 por responder la parte que el OP añadió después de mi respuesta: \ –

+0

@JimSchubert sorry mr schubert :( – Raynos

+10

Simplemente celoso porque su respuesta es más correcta :( –

18

Es posible que tenga un valor indefinido que usted está tratando de pasar en

Tomemos, por ejemplo, requires.js:.

module.exports = exports = function() { 
    console.log('arguments: %j\n', arguments); 
}; 

Cuando y ou llamar correctamente, funciona:

node 
> var requires = require('./requires')(0,1,2,3,4,5); 
arguments: {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5} 

Si usted tiene un error de sintaxis, falla:

> var requires = require('./requires')(0,); 
... var requires = require('./requires')(0,2); 
... 

Si usted tiene un objeto indefinido, no funciona:

> var requires = require('./requires')(0, undefined); 
arguments: {"0":0} 

Por lo tanto, primero verifico si su objeto está definido correctamente (y se escribe correctamente cuando lo transfiere), luego verifica que no tenga errores de sintaxis.

+1

Gracias. Mi error fue que olvidé cambiar el número de argumentos para una de las llamadas. – user885355

+0

Ahora entiendo cómo funciona esto un poco mejor. Mi pregunta restante ahora es sobre el error JSON. ¿La mayoría de la gente simplemente depura a través del navegador? – user885355

+0

Hasta donde yo sé, la mayoría de la gente usa 'util.inspect' para inspeccionar objetos (esto se hace internamente con' console.log'). También puede usar node-inspector (ver [artículo] (http://howtonode.org/debugging-with-node-inspector) para video tutorial). node-inspector es el inspector de webkit (como CTRL + SHIFT + J en Chrome) que escucha 'node --debug'. –

Cuestiones relacionadas