Quelqu'un peut-il s'il vous plaît expliquer ce qui se passe ici? Je vois %d
et %s
mais je ne les vois ni déclarés ni écrits ailleurs dans le code. Qu'est-ce que ça veut dire/faire en javascript? Je suppose que c'est une sorte de modèle de chaîne que je n'ai jamais vu auparavant?
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)
})
}
)
Ce que vous voyez ici, ce sont les modèles de substitution de chaîne qui sont intégrés dans console.log()
ou console.debug()
.
Le modèle va comme je l'ai présenté ci-dessous:
% s pour une valeur de chaîne
% d ou% i pour une valeur entière
% f pour un nombre à virgule flottante
% o pour un hyperlien d'objet
Donc, essentiellement, vous remplacez les valeurs par les valeurs fournies comme suit:
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()
et console.debug()
utilisent un formatage de style printf. Vous trouverez ci-dessous les formateurs officiellement pris en charge:
Représentation du formateur:
%O
Joliment imprimer un objet sur plusieurs lignes.%o
Joli-imprimer un objet tout sur une seule ligne.%s
Chaîne.%d
Nombre (entier et float).%j
JSON. Remplacé par la chaîne '[Circulaire]' si l'argument contient des références circulaires.%%
Seul signe de pourcentage ('%'). Cela ne consomme pas d'argument.Les résultats sont écrits dans la console de débogage. Ouvrez simplement votre ligne de commande ou votre terminal et exécutez-le en utilisant ceci:
node debug [script.js | -e "script" | <Host>:<port>] command
C'est probablement quelque chose de spécifique à debug (), car il n'y a pas de formatage de chaîne intégré en Javascript (pas sans bibliothèque).
Cependant,% d est remplacé par un entier et le% s par une chaîne. Exemple:
debug("I'm %s and I'm %d years old", "John", 10)
Devrait imprimer: je suis John et j'ai 10 ans.
Voici une bibliothèque que vous pourriez utiliser si vous êtes intéressé: http://www.diveintojavascript.com/projects/javascript-sprintf
pour un format simple comme %03d
, lodash.padStart
pourrait tout simplement faire l'affaire.
_.padStart(x, 3, '0')
Les spécificateurs de format de sortie% d% s, etc. proviennent de la norme ANSI C il arrive également dans le noeud via une bibliothèque - dans ce cas, util.format https://nodejs.org/api/util .html # util_util_format_format_args