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 变量是保存在同一个地方,还是被丢弃了?这些变量可供swigjade 等模板引擎访问,但我也无法使用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() 前端的本地位置的主要内容,如果未能解决你的问题,请参考以下文章

前端页面获取访问者的IP地址经纬度和地理位置

前端页面获取访问者的IP地址经纬度和地理位置

以异步方式执行 Express res.render

为啥 Angular Universal 中的 res.render 需要这么长时间?

jade模版js中接收express的res.render

Node.js在发送标题后无法设置标题引入res.render()后出错