1

我曾经使用 MVC javascript 框架,如 Backbone 或 Angular,我想充分使用 express,但有些事情我不知道该怎么做。

当我使用 javascript 客户端框架时,我进行了 AJAX GET 调用以从 express with 获取我的实体res.send(),但仅使用 express 渲染引擎,如何res.render('index', { User: { name: 'bob' }})在您的 javascript 代码中获取您在客户端发送的实体?

我尝试在客户端直接调用:

<script>
console.log(JSON.stringify(User));
</script>

但我得到一个Uncaught ReferenceError: User is not defined

但是,我可以使用以下方法访问我的 html 中的对象ejs

<h1><%= User.name %></h1>

我知道如何使用 html 在 html 中获取它ejs view engine,但是如何直接从 javascrit 获取它?

4

2 回答 2

0

您是否正在寻找诸如客户端渲染之类的东西?那么 RequireJS 就是适合你的东西。res.send 将数据发送回客户端 javascript 框架, res.render 呈现页面或模板。如果您需要其他东西,请告诉我。

于 2013-05-06T14:40:11.043 回答
0

很久以后才回答这个问题,但我遇到了这个问题并且在我得到它之前不得不使用它很长一段时间,我想我会为这个问题的未来访问者分享。

就像前面说的 V31 一样,res.render在 JavaScript 中先不传递数据就渲染模板。<%= User.name %>只要您的 EJS 模板实际上是 EJS 模板,变量 like仅引用它们的服务器端定义——一旦它被呈现为页面,它就会停止存在。正如 Express 文档所说,render“返回视图的呈现 HTML。” 换句话说,说console.log(User.name)客户端试图访问一个只存在于服务器中的对象。

你可以像这样解决这个问题:

<script>
    console.log('<%= JSON.stringify(User) %>');
</script>

加上引号,<%= JSON.stringify(User) %>因为这个结果将是一个字符串而不是一个变量——您不希望console.log将整个字符串化的用户数据视为一个变量,您只想记录它。

进一步了解这个概念,这就是如何使您传递到渲染中的变量也可以访问客户端 JavaScript 文件。例如,假设您有一个document.onLoad函数需要来自服务器的变量来决定是否进行特定的 DOM 操作。

<script>
   const bob = '<%= User.name %>';
   const alice = '<%= User.bestfriend %>';
</script>
<script src='/javascripts/myscript.js'></script>

myscript.js现在可以访问User.nameUser.bestfriend在服务器对象中定义它们User,并且可以以您认为合适的任何方式在客户端使用该数据。

于 2017-02-03T01:37:48.077 回答