2016-03-11 122 views
1

我想在一個玉石模板中包含一個HTML文件。文件的路徑和名稱是服務器在用戶請求後發送的變量/參數。Jade中的變量包含原因

片段的newView.jade

include !{lpath} 

的index.js

app.get('/material/*', function(req, res){ 
    var lpath = "../static/show/" + req.name; // req.name looks like newSite.html 
    res.render("newView.jade", {lpath: lpath}); 
}); 

代碼,但隨後的瀏覽器顯示

Error: E:\Git\GitHub\chat-example\views\lecture.jade:1 
    > 1| include !{lpath} 
    2| 
ENOENT: no such file or directory, open 'E:\newSite\views\!{lpath}.jade' 
at Error (native) 
at Object.fs.openSync (fs.js:584:18) 

我測試LPATH是否是正確的,它是。如果我以這種方式添加lpath

include ../static/show/newSite.html 

一切都很好。我也試過管道(見Use a variable in a Jade include

|!{lpath} 

感謝您的任何想法和提示。

回答

0

通過lpathrender()將不起作用。我也有同樣的問題,你需要做的是手工編譯的文件,然後concatinate然後像

var ejs = require('ejs'); 
var fs = require('fs'); 
var path = require('path'); 

app.get('/material/*', function(req, res){ 
    var htmlPart = ejs.compile(
     fs.readFileSync(path.join("../static/show/",req.name), 'utf8')); 
    var ejsPart = ejs.compile(
     fs.readFileSync(path.join("../relative_path_to_newView.jade","req.name"), 'utf8')); 
    var resBody = htmlPart + ejsPart; 
    res.send(resBody); 
    }); 

你可以使用異步功能也 希望它有助於

+0

感謝您的快速答覆。現在它工作正常。但是你的代碼有一個小錯誤。在您的摘錄中查看評論。 – JoV