【问题标题】:Node.js, express.js & hogan.js: partials not loading correctly after second refreshNode.js、express.js 和 hogan.js:第二次刷新后局部加载不正确
【发布时间】:2014-02-12 20:03:40
【问题描述】:

我有一个运行良好的 express 3 应用程序,但是当我第二次刷新站点时出现了问题。

var x = {footer:"footer", header:"header"}

exports.index = function(req, res){

    res.render("index.html", {jow: "ieps", partials:x})

}

当我第一次访问我的网站时,一切都很好,所有部分都很好。

但刷新时出现此错误:

Error: ENOENT, open '/Users/kevinvanhove/Documents/work/projects/basing/business/klanten/javascript/nodeJS/express/basing/views/<h2>wow</h2>.html'

但是,当删除 x 变量并将对象文字直接添加到 res.render 参数列表时,一切都可以正常工作了。

exports.index = function(req, res){

    res.render("index.html", {jow: "ieps", partials:{footer:"footer", header:"header"}})

}

更新:index.html 视图

{{> header}}
<h1>jow en {{jow}}</h1>
{{> footer}}

查看此藤蔓以获得快速概览:

https://vine.co/v/M7BYi75pdrh

非常感谢您提供一些见解,谢谢。

【问题讨论】:

  • 您在声明后修改了partials(内部视图文件)或x
  • 我认为这是一个简单的闭包问题,因为上面的代码在我使用 require() 包含在 app.js 中的模块 (index.js) 中。 res.render 函数必须更改部分键的值。这应该可以解释为什么在第二次刷新时,footer:"footer" 更改为 footer.html 页面的内容。有人可以详细说明吗?谢谢...
  • 你能发表你的看法吗?
  • 将视图添加到我的帖子中
  • 你能发一个带有&lt;h2&gt;wow&lt;/h2&gt;片段的代码吗?看来你写的是这样的:...header = '&lt;h2&gt;wow&lt;/h2&gt;'

标签: javascript node.js express hogan.js


【解决方案1】:

就像上面评论的那样,Consolitate.js 改变了原来的对象:https://github.com/tj/consolidate.js/blob/master/lib/consolidate.js#L124

我通过始终使用部分克隆解决了这个问题:

// ...
var _ = require('underscore');

var partials = { layout: 'layout' };

app.get('/', function(request, response) {
  response.render('index', { partials: _.clone(partials) });
});

这不是最好的解决方案,但它确实有效。

consolidate.js 可能应该使用不同的对象来缓存部分内容。我设法为 hogan 做到了这一点,但这不适用于所有其他引擎。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    相关资源
    最近更新 更多