[英]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.