#{docs}、!{docs} 和 docs 之间有什么区别(奇怪的是,文档中使用了所有三个示例,但没有一个真正解释过)
//This will output literal HTML <p>docs</p>
p docs
命令行示例:
echo "p docs" | jade
<p>docs</p>
//This will interpolate the variable docs into a string
//and also escape any HTML it may contain: <p>is jade cool?</p>
//To see what I mean, try passing docs: "jade is <b>cool</b>" (contains HTML)
//you'll get <p>jade is <b>cool</b></p>
p #{docs}
//This syntax is another flavor of the above
p= docs
命令行示例:
echo 'p #{docs}' | jade --obj '{docs: "jade is <b>cool</b>"}'
<p>jade is <b>cool</b></p>
echo 'p= docs' | jade --obj '{docs: "jade is <b>cool</b>"}'
<p>jade is <b>cool</b></p>
//This will do the same but NOT escape HTML
//The exclamation point is supposed to convey warning
//because this can be a XSS vulnerability
p !{docs}
命令行示例:
echo 'p !{docs}' | jade --obj '{docs: "jade is <b>cool</b>"}'
<p>jade is <b>cool</b></p>
echo 'p!= docs' | jade --obj '{docs: "jade is <b>cool</b>"}'
<p>jade is <b>cool</b></p>
控制台记录从节点传递给jade的全局对象属性的正确方法是什么以及将这些相同属性分配给本地js变量的正确方法
想要这样做是很常见的,而幼稚/不安全的答案是这样的:
script(type="text/javascript")!= "var myData = " + JSON.stringify(myData)
我可以通过哪些测试
jade --obj '{myData: {foo: "FOO"}}' < t1.jade
得到
<script type="text/javascript">var myData = {"foo":"FOO"}</script>
然而,在 HTML 文档中安全嵌入 JSON 数据的规则很棘手 (details here),因此我强烈建议使用诸如 sharify 之类的帮助模块,这将确保数据在 HTML 中安全传递。