繁体   English   中英

无法将嵌套对象传递给res.render()?

[英]Can't pass a nested object to res.render()?

我想通过jade从客户端javascript访问变量, 服务器(节点)传递。

所以我创建了一个嵌套对象:

var clientData = 
  {clientData:{
    title: 'Title',
    body: "body",
    appadress: 'localhost' || req.host,
    socketport: socketport,
  } }

然后将此对象传递给jade( 通过res.render )..

app.get('/', function(req, res){
  clientData.clientData.appadress = req.host;
  res.render('index.jade', clientData)});

在玉中收到的是......(我相信)

clientData:{
    title: 'Title',
    body: "body",
    appadress: 'localhost' || req.host,
    socketport: socketport,
  }

然后我可以将其作为单个对象传递给客户端javascript。

script.
  var clientData = #{clientData}

但这不起作用。

res.render()不会像这样或其他问题的嵌套对象吗?

您无法使用#{...}呈现对象,因为它会对对象进行字符串化(类似于: {}.toString() ,从而生成[object Object] )。

相反,您需要首先将变量转换为JSON,并确保Jade不会转义输出:

var clientData = !{ JSON.stringify(clientData) };

编辑 :这是一个简单的独立测试(但相同的原则适用于通过Express使用Jade):

// app.jade
var jade  = require('jade');

jade.renderFile('test.jade', {
  filename  : 'test.jade', // These two properties are only for `renderFile`,
  pretty    : true,        // you don't need to include them with`res.render`
  clientData:{
    title     : 'Title',
    body      : 'body',
    appadress : 'localhost',
    socketport: 8888,
  }
}, function(err, html) {
  if (err) throw err;
  console.log(html);
});

// test.jade
!!!
html
  head
    script.
      var clientData = !{ JSON.stringify(clientData) };
  body
    h1 Hello World

// Output:
<!DOCTYPE html>
<html>
  <head>
    <script>var clientData = {"title":"Title","body":"body","appadress":"localhost","socketport":1234};</script>
  </head>
  <body>
    <h1>Hello World</h1>
  </body>
</html>

我只是注意到你似乎使用clientData作为共享变量,并且只从每个请求设置clientData.clientData.appadress 这将导致问题,因为clientData变量在所有请求中共享,并且一个请求可能会覆盖appaddress属性,就像另一个请求将呈现模板一样(显示覆盖的属性)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM