2013-02-24 99 views
0

我正在开发一个简单的web应用程序,使用kiwi模板引擎和express。当我在浏览器中打开我的应用程序时,正确生成了模板,除了结果之外的所有内容都是JSON编码的。 我试过设置res.type('html'),但这似乎只能改变应用程序发送的MIME。我尚未使用任何AJAX请求。Expressjs返回json而不是html

我有下面的代码:

"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?

更新:好吧,我设法找到another app类似于我的(使用快递和奇异鸟),只有我发现的区别是库版本。所以我下载了Express 3.0.0beta7并且工作正常。怪怪的?

UPDATE2: bug是3.0.0rc4(HTML输出)和3.0.0rc5(JSON输出)之间

UPDATE3:我认为,只有可能是相关的变化是犯40be3ed05d9eb1da4568都改变Connect版本也许8edf358739

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

回答

1

FWIW(读您的修改,只是共享):我最近检查,取K iwi模板并遇到同样的问题。

当时我的修复是这样的:

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。没有给我对猕猴桃充满信心,最后我去了swig

+0

奇怪的行为。谢谢,我现在要使用它,并考虑切换到另一个模板引擎。 – 2013-02-26 15:04:18

+0

它看起来像5个月前固定在github回购([commit d09bb91fbe](https://github.com/coolony/kiwi/commit/d09bb91fbe7c41f1a109a29b7176695c4d2eeebb)),但没有移动到npm。 – 2013-03-13 17:34:57