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

标签 javascript node.js express pug

很好奇我是否做得对,如果不对,你们将如何处理。

我有一个 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);

但是,这种字符串化/解析业务感觉很困惑。我知道我可以将我的数据对象的值绑定(bind)到我的 Jade 模板中的 DOM 对象,然后使用 jQuery 获取这些值,但我想访问从我的客户端 JS 中的 Express 返回的实际对象。

我的解决方案是最优的吗,你们将如何做到这一点?

最佳答案

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

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

编辑:显然 Jade 在第一个右括号后需要一个点。

关于javascript - 在客户端 JavaScript 中访问 Express.js 局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10919650/

相关文章:

javascript - Angular 嵌套/动态 Handlebars

javascript - 单击时使用 HTML 元素更改 Javascript 变量值 (wavesurfer.js)

javascript - 服务器渲染错误

express - 将nginx与expressJS结合使用时,我应该在express还是nginx中使用压缩?

node.js - 将 MongoDB 集合迭代为 pug

javascript - 推送数组创建 CSV 时开始新行

javascript - 更新一个输入值就是更新AngularJS中数组中所有对应的输入值

node.js - 我在连接到 sqlite3 数据库时遇到错误

node.js - 如何在 Sequelize 中使用 Case Condition?

node.js - 如何使用puppeteer获取下载流(缓冲区)?