res.render() 前端的本地位置
Posted
技术标签:
【中文标题】res.render() 前端的本地位置【英文标题】:res.render() Locals Location on Frontend 【发布时间】:2014-11-25 20:29:09 【问题描述】:这可能是一个愚蠢的问题,但是在 Express 中,当你在 res.render(view, variable: variable)
中定义局部变量时,它们是如何在前端访问的?它们被保存在哪里?当我尝试使用console.log(variable)
访问我通过此方法定义的变量时,Firebug 会抛出一个错误,指出未定义variable
。我也试过console.log(window.variable)
,结果相似。那么这些变量保存在哪里呢?
另外,res.locals
变量是保存在同一个地方,还是被丢弃了?这些变量可供swig
和jade
等模板引擎访问,但我也无法使用console.log()
找到它们。
【问题讨论】:
【参考方案1】:这些变量不会自动传递给客户端代码;正如您所说,它们可用于在您的视图模板中编码。同样,在res.locals
(或app.locals
,具有相同的API)中定义的变量在任何视图中都可以作为局部变量使用。
如果您想让它们对客户端代码可用,您必须手动将它们作为响应的一部分以客户端 javascript 可访问的形式发送。例如,您可以将它们写入 <script>
标记,如下所示:Accessing Express.js local variables in client side JavaScript。
【讨论】:
该死,我有点希望他们以某种方式直接将其放在全局范围内,但现在我正在考虑它,它们首先需要在<script>
标记中是有道理的.不然以后<script>
标签里的代码怎么知道是什么?【参考方案2】:
这些变量仅用于在服务器端呈现视图。显然,其中一些值会进入服务器端响应的 html,但如果要将这些值序列化为 JSON,您可能希望查看诸如 sharify 之类的模块,嵌入到 HTML 中的 <script>
标记中,并在浏览器 javascript 代码中访问它们。
【讨论】:
我可能只会使用 JSON 或 JSONP。sharify
看起来很有趣,但它也可能将数据直接内联到 <script>
标记中,这是我不想要的。
对,sharify 仅适用于“引导”情况,您希望避免与 JSON 的 XmlHttpRequest 相关的延迟。
是的,这种延迟似乎很烦人。不幸的是,它开始看起来像是在延迟和一些最糟糕的做法(如内联 JavaScript)之间做出选择。
恕我直言,这种在
是的,但内联 JavaScript 是一种非常糟糕的做法。它会导致表示和业务逻辑的混合,使其难以测试等等。对于一个小型应用程序来说,这些似乎并没有那么糟糕,但它是一个非常滑向黑暗面的斜坡。以上是关于res.render() 前端的本地位置的主要内容,如果未能解决你的问题,请参考以下文章