Javascript 无法将嵌套对象传递给res.render()?
我想访问客户端javascript上传递的变量 因此,我创建了一个嵌套对象:Javascript 无法将嵌套对象传递给res.render()?,javascript,node.js,express,pug,Javascript,Node.js,Express,Pug,我想访问客户端javascript上传递的变量 因此,我创建了一个嵌套对象: var clientData = {clientData:{ title: 'Title', body: "body", appadress: 'localhost' || req.host, socketport: socketport, } } 然后把这个东西递给杰德 在玉器中被视为。。我相信 clientData:{ title: 'Title', bo
var clientData =
{clientData:{
title: 'Title',
body: "body",
appadress: 'localhost' || req.host,
socketport: socketport,
} }
然后把这个东西递给杰德
在玉器中被视为。。我相信
clientData:{
title: 'Title',
body: "body",
appadress: 'localhost' || req.host,
socketport: socketport,
}
然后我可以将其作为单个对象传递给客户端javascript
但这不起作用
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.AppAddress。这将导致问题,因为clientData变量在所有请求中共享,并且一个请求可能会覆盖appaddress属性,就像另一个请求将呈现显示被覆盖属性的模板一样。您不能使用{…}呈现对象,因为这样会使对象字符串化,类似于:{}.toString,这将产生[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.AppAddress。这将导致问题,因为clientData变量在所有请求中共享,并且一个请求可能会覆盖appaddress属性,就像另一个请求将呈现显示被覆盖属性的模板一样。感谢您的帮助。但是我也不能让它工作。。首先,用!{}它给出了一个“意外标记”。错误。顺便说一句,这有什么用?所以我必须省略它clientData=JSON.stringifyclientData;。其次,即使在jsonification之后传递变量,jade中的简单div=clientData也不会输出任何内容。我可以麻烦你发布一个更完整的代码,还有玉边的代码吗?@laggingreflect我更新了我的答案,给出了一个例子,我注意到你的代码中有一个潜在的错误,tooThanks for the insight。但是我也不能让它工作。。首先,用!{}它给出了一个“意外标记”。错误。顺便说一句,这有什么用?所以我必须省略它clientData=JSON.stringifyclientData;。其次,即使在jsonification之后传递变量,jade中的简单div=clientData也不会输出任何内容。我可以麻烦你发布一个更完整的代码,还有玉边代码吗?@laggingreflect我更新了我的答案,给出了一个例子,我注意到你的代码中也有一个潜在的错误