当前位置: 首页 > 面试题库 >

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

全流觞
2023-03-14
问题内容

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

我有一个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返回的实际对象。

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


问题答案:

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

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

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



 类似资料:
  • 我们计划将主动 MQ (STOMP) 用于我们的一个项目。其中一个要求是,如果我们发现用户不合适,就将其踢出/禁止。如何通过单板技术实现这一点?有点像在 IRC 中踢球的东西。

  • 问题内容: 嗨,我正在浏览有关内部类的SCJP书,发现了这一说法,类似这样。 方法本地类只能引用已标记的本地变量 在解释中,指定的原因与本地类对象和堆上的局部变量的范围和生存期有关,但我无法理解。我在这里想念任何东西吗? 问题答案: 原因是,在创建方法本地类实例时,编译器实际上会将其引用的所有方法本地变量复制到其中。这就是为什么只能访问变量的原因。甲变量或参考是不变的,所以它停留在同步与其方法本地

  • 24.10 在客户端访问RESTful服务 RestTemplate是客户端访问RESTful服务的核心类。它在概念上类似于Spring中的其他模板类,例如JdbcTemplate、 JmsTemplate和其他Spring组合项目中发现的其他模板类。 RestTemplate’s behavior is customized by providing callback methods and c

  • 我需要在JavaScript中访问Azure密钥库中的一些秘密值。它是普通的JavaScript,没有NPM和节点。有没有直接从JavaScript获取值的选项?或者我需要编写一个单独的API来检索密钥库。这与保护某些ID无关,我想知道是否有任何可能的选项从客户端获取密钥库值。 我希望这是在简单的JavaScript。

  • 但是,如果我在内部类中声明了一个同名的variabe呢?有什么方法可以显式引用外部变量吗? 顺便说一句,这和这个问题不同,因为它考虑的是局部堆栈变量。