2011-09-09 15 views
58

Kiedy zrobić:node.js "wymagają" funkcji i parametrów

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

app jest rzeczywiście geting przekazany?

w lib.js:

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

Wygląda jak nie, ponieważ gdy próbuję zrobić coś więcej niż tylko (app) i zamiast zrobić:

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

I:

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

Nie dostaję params2.

Próbowałem debugowania wykonując:

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

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

ale w lib.js gdy próbuję JSON.stringify otrzymuję ten błąd:

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

Jakie zmienne przekazujesz? Czy są one zadeklarowane i zdefiniowane? –

Odpowiedz

82

Po wywołaniu lib = require("lib.js")(params)

Wywołujesz lib.js z jednym parametrem zawierającym dwie właściwości: app i param2

Albo chcą

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

lub

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

+1 za odpowiedź na część dodaną przez OP po mojej odpowiedzi: \ –

+0

@JimSchubert sorry mr schubert :( – Raynos

+10

Po prostu zazdrosny, bo twoja odpowiedź jest bardziej poprawna :( –

18

może mieć nieokreśloną wartość, którą próbujesz przekazać w

Weźmy na przykład requires.js.

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

Gdy y ou nazywają go poprawnie, to działa:

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

Jeśli masz błąd składni, to nie:

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

Jeśli masz niezdefiniowany obiekt, to nie działa:

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

Najpierw sprawdzam, czy Twój obiekt został poprawnie zdefiniowany (i poprawnie wpisany, gdy go przekażesz), a następnie sprawdź, czy nie masz błędów składniowych.

+1

Dziękuję. Mój błąd polegał na tym, że zapomniałem zmienić numer Argumenty za jednym z wywołań – user885355

+0

Teraz rozumiem, jak to działa nieco lepiej.Moje pozostałe pytanie jest teraz o błędzie JSON.Czy większość ludzi po prostu debugowania za pośrednictwem przeglądarki? – user885355

+0

O ile mi wiadomo, większość ludzi używa 'util.inspect' do inspekcji obiektów (odbywa się to wewnętrznie za pomocą' console.log'). Możesz także użyć inspektora węzłów (zobacz [artykuł] (http://howtonode.org/debugging-with-node-inspector) do samouczka wideo). node-inspector to inspektor webkitów (np. CTRL + SHIFT + J w Chrome), który nasłuchuje na 'node --debug'. –