在客户端JavaScript中访问Express.js的本地变量
在客户端JavaScript中访问Express.js的本地变量
我想知道我是否做对了,如果不对的话,你们会如何处理这个问题。
我有一个Jade模板,需要渲染从MongoDB数据库检索到的一些数据,并且我还需要在客户端的JavaScript文件中访问这些数据。
我正在使用Express.js,并将数据发送到Jade模板,如下所示:
var myMongoDbObject = {name : 'stephen'};
res.render('home', { locals: { data : myMongoDbObject } });
然后在home.jade中,我可以这样做:
p 你好 #{data.name}!
这将输出:
Hello stephen!
现在我想在客户端JS文件中也可以访问这个数据对象,这样我就可以在点击按钮之前对对象进行操作,然后将其POST回服务器以更新数据库。
通过将“data”对象保存在Jade模板中的隐藏输入字段中,并在客户端JS文件中获取该字段的值,我已经成功实现了这一点。
在home.jade中:
- local_data = JSON.stringify(data) // 从Express.js传入的数据
input(type='hidden', value=local_data)#myLocalDataObj
然后在我的客户端JS文件中,我可以这样访问local_data:
在myLocalFile.js中:
var localObj = JSON.parse($("#myLocalDataObj").val());
console.log(localObj.name);
然而,这种stringify / 解析的方式感觉有点凌乱。我知道我可以将数据对象的值绑定到Jade模板中的DOM对象上,然后使用jQuery获取这些值,但我希望在客户端JS中可以访问从Express返回的实际对象。
我的解决方案是否最佳?你们会如何处理这个问题?