有人可以解释一下这里发生了什么吗?我看到%d
和%s
,但我没有在代码中的任何其他地方看到这些声明或写入。这在javascript中意味着什么?我假设它是一种我以前从未见过的字符串模板?
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)
})
}
)
答案 0 :(得分:29)
您看到的是console.log()
或console.debug()
中内置的字符串替换模式。
模式如下所示:
%s 表示字符串值
%d 或 %i 表示整数值
%f 表示浮点数
对象超链接的%o
所以基本上你用值提供的值替换值:
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.
答案 1 :(得分:3)
console.log()
和console.debug()
使用printf样式格式。以下是官方支持的格式化程序:
格式化程序表示:
%O
在多行上打印一个对象。%o
在一行上打印一个对象。%s
字符串。%d
数字(包括整数和浮点数)。%j
JSON。如果参数包含循环引用,则替换为字符串'[Circular]'。%%
单个百分号('%')。这不会消耗论据。结果写在调试控制台中。只需打开命令行或终端并使用以下命令运行它:
node debug [script.js | -e "script" | <host>:<port>] command
答案 2 :(得分:2)
您可以指定一种样式来使用CSS记录文本。
console.log("%c YourText", "color:blue; font-weight:bold;");
您可以为不同的控制台日志文本创建多种样式。
console.log("%c Text1 %c Text2 %c Text3", "color:red;", "color:green;", "color:blue;");
答案 3 :(得分:1)
这可能是debug()的特定内容,因为Javascript中没有内置的字符串格式(不是没有库)。
但是,%d被整数替换,%s被字符串替换。例如:
debug("I'm %s and I'm %d years old", "John", 10)
应该打印:我是约翰,我已经10岁了。
如果您有兴趣,可以使用以下库:http://www.diveintojavascript.com/projects/javascript-sprintf
答案 4 :(得分:0)
%输出格式说明符%d%s等来自ANSI C. 因此它通过库进入节点 - 在本例中为util.format https://nodejs.org/api/util.html#util_util_format_format_args
答案 5 :(得分:0)
对于%03d
这样的简单格式,lodash.padStart
可以完成工作。
_.padStart(x, 3, '0')