web-dev-qa-db-fra.com

Node.js "require", fonction et paramètres

Quand je fais:

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

app est-il réellement transmis?

dans lib.js:

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

On dirait que non, puisque j'essaie de faire plus que simplement (app) et à la place:

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

Et:

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

Je ne comprends pas params2.

J'ai essayé de déboguer en faisant:

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

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

mais dans lib.js quand j'essaie de JSON.stringify Je reçois cette erreur:

"DEBUG: TypeError: Converting circular structure to JSON"
68
user885355

Lorsque vous appelez lib = require("lib.js")(params)

Vous appelez en fait lib.js avec un paramètre contenant deux propriétés name app et param2

Vous voulez soit

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

ou

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

Vous pouvez avoir une valeur indéfinie que vous essayez de transmettre.

Prenons par exemple, requires.js:

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

Lorsque vous l'appelez correctement, cela fonctionne:

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 vous avez une erreur de syntaxe, elle échoue:

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

Si vous avez un objet non défini, cela ne fonctionne pas:

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

Donc, je vérifierais d'abord que votre objet est défini correctement (et orthographié correctement lorsque vous le transmettez), puis vérifiez que vous n'avez pas d'erreur de syntaxe.

18
Jim Schubert