如何将变量从Jade模板文件传递到Javascript文件?

man*_*j82 1 node.js express pug

我是Node.js的新手并试图解决一些问题.如何将变量从Jade模板文件传递到JS文件?

我的server.js文件中有这行代码

res.render("aws.jade", {data : JSON.stringify({'val' : 'This is a Test'})});
Run Code Online (Sandbox Code Playgroud)

基本上我只是试图将数据中的获取到aws.jade模板文件

这是aws.jade

html
    head
       script(type='text/javascript')
            var data = !{data}
        link(rel='stylesheet', href='/stylesheets/style.css')
    body
        title Title
        h1 Heading
        #div.test
Run Code Online (Sandbox Code Playgroud)

我一直在Firebug控制台中收到此错误:

<var>data = {"val":"This is a Test"}</var>
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下为什么会发生这种情况,以及我将变量从Jade模板文件传递到JS文件的方法吗?

谢谢

Jon*_*les 5

尝试.在脚本之后添加一个字符,这告诉Jade你想要一个标签内的文本块.

这是您更新的代码.

html
    head
        script(type='text/javascript').
            var data = !{data}
        link(rel='stylesheet', href='/stylesheets/style.css')
    body
        title Title
        h1 Heading
        #div.test
Run Code Online (Sandbox Code Playgroud)

编辑 - 将标题设置为data.val

首先,您应该更改您的响应,删除JSON.stringify,以便返回一个对象而不是字符串值.

res.render("aws.jade", {data : {'val' : 'This is a Test'}});
Run Code Online (Sandbox Code Playgroud)

然后你应该能够使用点表示法直接访问数据对象属性和结构,并将它直接分配给title元素,就像这样......

title= data.val
Run Code Online (Sandbox Code Playgroud)

  • 是的,更新你的脚本并用`var data =!{JSON.stringify(data)};`替换`data =!{data}`.这将解析数据对象客户端以进行javascript分配,并仍然允许模板引擎模型进行解析. (2认同)