app.render 在Node.js中使用Express与Gaikan
res.render工作正常:
res.render('main', function(err, html){ // Returns '<html></html>' contained inside of 'views/main.html' console.log(html); });
但是我的app.render:
app.render('main', function(err, html){ // Returns undefined console.log(html); });
app.render返回的错误是:
[TypeError: Cannot set property 'content' of undefined]
我假设它正在尝试设置data.content(作为更改的一部分),但是我不确定,而且我不知道问题是什么。
帮助将不胜感激。
堆栈跟踪: http : //puu.sh/5qGSq.png
configuration:
var express = require('express'), gaikan = require('gaikan'); app.configure(function() { app.engine('html', gaikan); app.set('view engine', 'html'); app.set('views', __dirname + '/views'); gaikan.options.scoped = true; });
如上所述,模板只是<html></html>
。
我认为这是一个问题,一个假设是不正确的,也就是说,传递给render函数的options
参数总是包含一个_locals
属性。
查看Express代码,只有在调用res.render()
时,该属性才能保证存在,但当调用res.render()
,需要在代码之前自行显式传递它:
app.render('main', { _locals : {} }, function(err, html) { ... });
我无法重现的原因是因为这个问题只发生在gaikan.options.scoped === true
。