2017-02-23 35 views
10

Czy ktoś może wyjaśnić, co się tutaj dzieje? Widzę %d i %s, ale nie widzę tych zadeklarowanych lub zapisanych nigdzie indziej w kodzie. Co do cholery robi to oznaczać/robić w javascript? Zakładam, że jest to rodzaj szablonów, których nigdy wcześniej nie widziałem?JavaScript:% s lub% d oznacza ciąg?

passport.deserializeUser(
 
    (id, done) => { 
 
    debug('will deserialize user.id=%d', id) 
 
    User.findById(id) 
 
     .then(user => { 
 
     debug('deserialize did ok user.id=%d', user.id) 
 
     done(null, user) 
 
     }) 
 
     .catch(err => { 
 
     debug('deserialize did fail err=%s', err) 
 
     done(err) 
 
     }) 
 
    } 
 
)

+2

To nie jest część JavaScript, tylko pozornie coś, co "debugowanie" interpretuje. Czym jest "debugowanie"? (Może to być wykorzystanie wbudowanego Węzła [util.format] (https://nodejs.org/api/util.html#util_util_format_format_args).) – Ryan

+0

@Ryan ciekawe ... to moduł npm https: // www.npmjs.com/package/debug - i wygląda jak 'util.format' jest dokładnie tym, czego używa. – Turnipdabeets

+0

To tylko część funkcjonalności obiektu konsoli, który prawdopodobnie używa 'debugowania'. – 1252748

Odpowiedz

15

Co widzisz istnieje wzory substytucji ciąg, które są wbudowane w console.log() lub console.debug().

Wzór idzie jak już przedstawiono poniżej:

% sna wartość ciągu

% dlub% iprzez wartość całkowitą

% fna liczbę zmiennoprzecinkową

% ona hiperłącze Object

Więc zasadniczo wymieniasz wartości z wartościami dostarczanych jako tak:

var name = 'Chris'; 
console.log('Hi, my name is %s.', name); 
//Output: Hi, my name is Chris. 

console.debug('Hi, my name is %s.', name); 
//Output: Hi, my name is Chris. 
+0

Od kiedy to było częścią console.log? Wow, nie mogę uwierzyć, że nigdy wcześniej o tym nie słyszałem. – Turnipdabeets

+0

Nie jestem całkiem pewien, jak długo to trwało; jednak wiem, że jest to mniej więcej związane z przeglądarką. Mając to na uwadze, istnieją jego ograniczenia, ponieważ każda "nowoczesna" przeglądarka ma swój własny program do debugowania JavaScript/aplikacji. –

1

Prawdopodobnie jest coś specyficznego w debug(), ponieważ nie ma wbudowanej ciąg formatowania w JavaScript (nie bez biblioteki).

Jednak% d jest zastępowany przez liczbę całkowitą, a% s jest zastępowany przez ciąg. Przykład:

debug("I'm %s and I'm %d years old", "John", 10) 

Powinien wydrukować: Jestem John i mam 10 lat.

Oto biblioteki można użyć, jeśli jesteś zainteresowany: http://www.diveintojavascript.com/projects/javascript-sprintf

+0

Dzięki @Bruno, tak debugowanie jest modułem npm npmjs.com/package/debug – Turnipdabeets

+0

Cieszę się, że mogę pomóc @Anna! –

1

console.log() i console.debug() użyj formatowania w stylu printf. Poniżej są oficjalnie wspierane formatujących: reprezentacja

Formatter:

  • %O Całkiem-print obiektu na wielu liniach.
  • %o Całkiem wydrukuj obiekt w jednej linii.
  • %s Ciąg.
  • %d Liczba (zarówno całkowita, jak i zmiennoprzecinkowa).
  • %j JSON. Zastępowany łańcuchem "[Circular]", jeśli argument zawiera odwołania kołowe.
  • %% Pojedynczy znak procentu ("%"). To nie pochłania argumentu.

Wyniki są zapisywane w konsoli debugowania. Wystarczy otworzyć wiersz polecenia lub terminala i uruchomić go za pomocą tego:

node debug [script.js | -e "script" | <host>:<port>] command 
+0

Uruchomiłem polecenie, ale dostaję błędy: -bash: -e: polecenie nie znaleziono -bash: host: Brak takiego pliku lub katalogu (węzeł: 62955) Wystąpił błąd wewnętrzny w debugerze Node. Zgłoś ten błąd. zapisu EPIPE błędach: napisać EPIPE na exports._errnoException (util.js: 1022: 11) na WriteWrap.afterWrite [jako onComplete] (net.js: 804: 14) – Turnipdabeets

+0

Które środowisko używasz Windows, Linux lub Prochowiec? – Teocci

+0

@Tecci Używam mac – Turnipdabeets