gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:23:58 25 4
gpt4 key购买 nike

我想在客户端 javascript 上访问一个变量,through jade , 传form the server (node) .

所以我做了一个嵌套对象:

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

然后将这个对象传递给 jade ( via res.render )..

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

在 Jade 中,它被认为是……(我相信)

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

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

script.
var clientData = #{clientData}

但这行不通。

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

最佳答案

您不能使用 #{...} 渲染对象,因为那样会将对象字符串化(类似于:{}.toString(),这会产生[对象对象]).

相反,您需要先将变量转换为 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 属性,就像另一个请求将呈现模板(显示被覆盖的属性)一样.

关于javascript - 无法将嵌套对象传递给 res.render()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20417036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com