2015-05-11 38 views
0

我使用Jade模板引擎來替換我的變量替換:;我曾嘗試以下:無法在節點快速查找玉視圖

var express = require('express'); 
var jade = require('jade'); 
var router = express.Router(); 
router.get('/test', function (req, res, next) { 
     var html= res.render(jade.renderFile('test', {"message": "test1", "title": "test2"})); 
     res.render(html); 
}); 
module.exports = router; 

和下面是我test.jade:

html 
    head 
    title= title 
    body 
    h1= message 

,但我一直如下因素的錯誤:

消息:

> "Failed to lookup view 
> "<html><head><title>test2</title></head><body><h1>test1</h1></body></html>" 
> in views directory "C:\node\myProj\views"", 

阿洛斯這裏是我在我的app.js中設置玉器:

app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 
app.engine('jade', require('jade').__express); 

那麼我做錯了什麼?任何幫助表示讚賞...

更新爲使用res.render:

更新使用app.render:

所以我改變了我的路線:

var express = require('express'); 
var router = express.Router(); 
var app; 
module.exports = function (_app) { 
    app = _app; 
    return router; 
} 
router.get('/test', function (req, res, next) { 
    app.render('test', {"message": "test1", "title": "test2"}, function(err, html){ 
     res.render(html); 
    }); 
}); 

和現在我在app.js以這種方式進行測試:

var test = require('./routes/test'); 
app.use(test(app)); 

現在,它給了我:

> "Failed to lookup view 
> "<html><head><title>test2</title></head><body><h1>test1</h1></body></html>" 
> in views directory "C:\node\myProj\views"" 

雖然res.render正常工作:

res.render('test', {"message": "test1", "title": "test2"}); 

回答

1

看起來你接近,但您的請求處理程序需要稍作調整:

router.get('/test', function (req, res, next) { 
    res.render('test', {"message": "test1", "title": "test2"})); 
}); 
  • 因爲你設置的視圖引擎,res.render現在已經足夠智能爲你做你的玉
  • 您也可以再次省略./views前綴和後綴.jade,因爲現在快遞這些理解爲默認
  • 你也不必要求jade在你的路由器的文件了
+0

感謝完整的解釋! – user385729

+0

又一個佇立;如果我想要使用替換的變量呈現字符串? – user385729

+0

換句話說,我不想用被替換的呈現模板作爲響應對象數據;實際上,我想要替換並呈現html字符串並將其作爲電子郵件發送....因此,我希望將結果作爲 – user385729