2011-09-09 9 views
58

Quando faccio:Node.js "richiedono" la funzione e parametri

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

è app realtà geting passato in?

in lib.js:

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

sembra che nessuno, dal momento che quando cerco di fare di più che (app) e invece fare:

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

E:

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

Non ricevo params2.

Ho cercato di eseguire il debug facendo:

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

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

ma in lib.js quando cerco di JSON.stringify ottengo questo errore:

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

Quali sono le variabili che stai passando? Sono dichiarati e definiti? –

risposta

82

Quando si chiama lib = require("lib.js")(params)

In realtà stai chiamando lib.js con un parametro contenente due proprietà nome app e param2

O si vuole

// 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 per rispondere alla parte che l'OP ha aggiunto dopo la mia risposta: \ –

+0

@JimSchubert scusa signor schubert :( – Raynos

+10

Solo geloso perché la tua risposta è più corretta :( –

18

Si può avere un valore indefinito che si sta cercando di passare in

Prendiamo, per esempio, requires.js:.

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

Quando si ou chiamano correttamente, funziona:

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

Se si dispone di un errore di sintassi, viene a mancare:

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

Se si dispone di un oggetto indefinito, non funziona:

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

Quindi, prima verificherei che il tuo oggetto sia definito correttamente (e digitato correttamente quando lo passi), quindi controlla di non avere errori di sintassi.

+1

Grazie. Il mio errore è stato che ho dimenticato di cambiare il numero di argomenti per una delle chiamate – user885355

+0

Ora capisco come funziona un po 'meglio. La mia domanda rimanente riguarda ora l'errore JSON. La maggior parte delle persone esegue il debug attraverso il browser? – user885355

+0

Per quanto ne so, molte persone usano 'util.inspect' per ispezionare gli oggetti (questo viene fatto internamente con' console.log'). Puoi anche usare node-inspector (vedi [articolo] (http://howtonode.org/debugging-with-node-inspector) per video tutorial). node-inspector è l'ispettore webkit (come CTRL + MAIUSC + J in Chrome) che ascolta 'node --debug'. –

Problemi correlati