我习惯使用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
:
<h1><%= User.name %></h1>
我知道如何使用ejs view engine
在html中获取它,但是如何直接从javascrit获取它?
答案 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.js
和User.name
,因为它们是在服务器的User.bestfriend
对象中定义的,并且可以在客户端使用该数据无论你认为合适的方式。