Kann jemand bitte erklären, was hier passiert? Ich sehe %d
und %s
, aber ich sehe diese nicht irgendwo anders im Code. Was zum Teufel bedeutet das in Javascript? Ich gehe davon aus, dass es eine Art String-Templat ist, das ich noch nie gesehen habe?
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)
})
}
)
Was Sie dort sehen, sind die String-Substitutionsmuster, die in console.log()
oder console.debug()
integriert sind.
Das Muster verläuft wie ich unten dargestellt habe:
% s für einen String-Wert
% d oder% i für einen Integer-Wert
% f für eine Fließkommazahl
% o für einen Objekt-Hyperlink
Sie ersetzen also im Wesentlichen die Werte durch die angegebenen Werte:
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.
console.log()
und console.debug()
verwenden die Formatierung im Format printf. Hier sind die offiziell unterstützten Formatierer:
Formatierungsdarstellung:
%O
Ein Objekt in mehreren Zeilen schön drucken.%o
Ein Objekt ganz in einer Zeile drucken.%s
String.%d
Number (sowohl Integer als auch Float).%j
JSON. Wird durch die Zeichenfolge "[Circular]" ersetzt, wenn das Argument Zirkelverweise enthält.%%
Ein Prozentzeichen ('%'). Dies verbraucht kein Argument.Die Ergebnisse werden in die Debug-Konsole geschrieben. Öffnen Sie einfach Ihre Befehlszeile oder Ihr Terminal und führen Sie es folgendermaßen aus:
node debug [script.js | -e "script" | <Host>:<port>] command
Das ist wahrscheinlich etwas spezifisch für debug (), da es in Javascript keine eingebauten String-Formatierungen gibt (nicht ohne Bibliothek).
% D wird jedoch durch eine ganze Zahl und% s durch eine Zeichenfolge ersetzt. Beispiel:
debug("I'm %s and I'm %d years old", "John", 10)
Sollte drucken: Ich bin John und ich bin 10 Jahre alt.
Hier ist eine Bibliothek, die Sie bei Interesse verwenden können: http://www.diveintojavascript.com/projects/javascript-sprintf
bei einem einfachen Format wie %03d
könnte lodash.padStart
die Aufgabe erledigen.
_.padStart(x, 3, '0')
Die% -Ausgabeformat-Spezifizierer% d% s usw. stammen von ANSI C Damit kommt sie durch eine Bibliothek in den Knoten - in diesem Fall util.format https://nodejs.org/api/util .html # util_util_format_format_args