Node.js,express.js& hogan.js:第二次刷新后部分未正确加载

时间:2014-02-12 20:03:40

标签: javascript node.js express hogan.js

我有一个运行良好的快速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

非常感谢您的一些见解,谢谢。

1 个答案:

答案 0 :(得分:0)

如上所述,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做了这个,但这不适用于所有其他引擎。