0

我正在使用kiwi模板引擎和express开发一个简单的网络应用程序。当我在浏览器中打开我的应用程序时,会正确生成模板,并且除结果之外的所有内容都是 JSON 编码的。我尝试设置 res.type('html') 但这似乎只会改变应用程序发送的 mime。我还没有使用任何 AJAX 请求。

我有以下代码:

"use strict";

var express = require('express');
var path = require('path');
var publicDir = path.join(__dirname, 'public');

var app = express();

app.configure(function(){
    app.set('views', __dirname + '/view');
    app.engine('kiwi', require('kiwi').__express);
    app.set('view engine', 'kiwi');

    app.use(require('less-middleware')({ src: publicDir }));
    app.use(express.favicon());
    app.use(express.static(publicDir));
});
app.configure('development', function(){
    app.use(express.logger());
});


app.get('/', function(req, res){
    res.render('index', {title: 'kiwi'});
});

app.listen(process.env.PORT || 8080);

我使用这样的布局文件(为了便于阅读,删除了大部分布局 html):

<div class="container">
    {{block content}}{{/block}}
</div>

这是 index.kiwi 文件:

{{extend 'layout'}}
{{block content}}
<p>Hi ${title}</p>
{{/block}}

这是我在浏览器中看到的(使用 text/json mime 发送):

"<div class=\"container\">\n\t\n<p>Hi kiwi</p>\n\n</div>"

我怎样才能让它发送正常的 HTML?

更新:好的,我设法找到了另一个类似于我的应用程序(使用 express 和 kiwi),我发现的唯一区别是库版本。所以我下载了 express 3.0.0beta7 并且它正在工作。很奇怪吧?

UPDATE2:该错误介于 3.0.0rc4(html 输出)和 3.0.0rc5(json 输出)之间

UPDATE3:我相信只有可能相关的更改是提交40be3ed05d9eb1da4568都更改连接版本或可能8edf358739

你可以在这里看到回购:https ://github.com/jtojnar/srs

4

1 回答 1

1

FWIW(阅读您的编辑,只是分享;):我最近检查了 Kiwi 模板并遇到了同样的问题。

我当时的修复是这样的:

  this.engine('kiwi', function(filename, options, callback) {
    kiwi.__express(filename, options, function(err, rendered) {
      if (! is_production && err)
        console.error(err);
      callback(err, rendered.toString());
    });
  });

rendered参数不是字符串,而是对象。这使 Express 感到困惑,并使得(或者更确切地说:制造)它返回 JSON。并没有给我对 Kiwi 的信心,最后我选择了swig

于 2013-02-26T12:12:34.840 回答