一尘不染

在客户端JavaScript中访问Express.js局部变量

node.js

很好奇我是否做对了,如果没有,你们会怎么做。

我有一个Jade模板,该模板需要呈现从MongoDB数据库检索到的一些数据,而且我还需要访问客户端JavaScript文件中的该数据。

我正在使用Express.js并将数据发送到Jade模板,如下所示:

var myMongoDbObject = {name : 'stephen'};
res.render('home', { locals: { data : myMongoDbObject } });

然后在 home.jade 内部,我可以做类似的事情:

p Hello #{data.name}!

写出来:

Hello stephen!

现在,我想要的是还可以访问客户端JS文件中的此数据对象,以便在将其回发到服务器以更新数据库之前,只需单击一下按钮即可操作该对象。

通过将“数据”对象保存在Jade模板的隐藏输入字段中,然后在客户端JS文件中获取该字段的值,我已经能够实现这一点。

内部home.jade

- local_data = JSON.stringify(data) // data coming in from Express.js
input(type='hidden', value=local_data)#myLocalDataObj

然后在我的客户端JS文件中,我可以像这样访问local_data:

在myLocalFile.js内部

var localObj = JSON.parse($("#myLocalDataObj").val());
console.log(localObj.name);

但是,这种分类/解析业务感觉很混乱。我知道我可以将我的数据对象的值绑定到我的Jade模板中的DOM对象,然后使用jQuery来获取这些值,但我想访问客户端JS中从Express返回的实际对象。

我的解决方案是否最优,你们将如何实现?


阅读 238

收藏
2020-07-07

共1个答案

一尘不染

渲染完成后,仅将渲染的HTML发送给客户端。因此,不再有变量可用。您可以做的是,不要在输入元素中写入对象,而是将对象输出为呈现的JavaScript:

script(type='text/javascript').
    var local_data =!{JSON.stringify(data)}

编辑:显然,玉在第一个结束括号后需要一个点。

2020-07-07