如何使用render express方法使用javascript在客户端获取数据?

时间:2013-05-06 14:27:32

标签: express

我习惯使用Backbone或Angular等MVC javascript框架,我想完全使用express,还有一些我不知道该怎么做。

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

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

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

但我得到Uncaught ReferenceError: User is not defined

但是,我可以使用ejs

访问我的html中的对象
<h1><%= User.name %></h1>

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

2 个答案:

答案 0 :(得分:0)

您在寻找客户端渲染之类的东西吗?然后RequireJS就是你的选择。 res.send将数据发送回客户端javascript框架,res.render呈现页面或模板。如果您需要别的东西,请告诉我。

答案 1 :(得分:0)

稍后回答这个问题,但是我遇到了这个问题并且在我得到它之前必须使用它已经有一段时间了,我想我会分享这个问题的未来访问者。

与前面提到的V31一样,try { var user = await getUser(userId); } catch(error) { crashreporter.reportError('User DB failed', error); return showToUser(1); } try { var chargeId = chargeCreditCard(user); } catch(error) { crashreporter.reportError('Credit card failed', error); return showToUser(4); } try { var chargeHistoryId = saveChargeId(chargeId); } catch(error) { crashreporter.reportError('ChargeId DB failed', error); return showToUser(2); } try { var result = associateChargeToUsers(chargeHistoryId); } catch(error) { crashreporter.reportError('chargeHistoryId DB failed', error); return showToUser(3); } return showToUser(finalFormatting(result)); 呈现模板而不先在JavaScript中传递数据。只要你的EJS模板实际上是一个EJS模板,像res.render这样的变量只引用它们的服务器端定义 - 它一旦被渲染为页面就停止了。正如Express文档所说,<%= User.name %>&#34;返回视图的呈现HTML。&#34;换句话说,render客户端正在尝试访问仅存在于服务器中的对象。

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

console.log(User.name)

<script> console.log('<%= JSON.stringify(User) %>'); </script> 周围需要引号,因为此结果将是字符串而不是变量 - 您不希望您的<%= JSON.stringify(User) %>将整个字符串化的用户数据视为变量,你只想记录它。

进一步考虑这个概念,这就是为什么人们可以将变量传递到您的渲染中,也可以访问客户端JavaScript文件。例如,假设您有一个console.log函数,该函数需要服务器中的变量来决定是否进行特定的DOM操作。

document.onLoad

<script> const bob = '<%= User.name %>'; const alice = '<%= User.bestfriend %>'; </script> <script src='/javascripts/myscript.js'></script> 现在可以访问myscript.jsUser.name,因为它们是在服务器的User.bestfriend对象中定义的,并且可以在客户端使用该数据无论你认为合适的方式。