我想在玉石模板中包含HTML文件。文件的路径和名称是变量/参数,由服务器在用户请求后发送。
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});
});
newView.jade的代码
include !{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 :(得分:0)
将lpath
传递给render()
将无效。我也遇到了同样的问题,你需要做的是手动编译文件,然后再点缀像
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);
});
您也可以使用异步功能 希望它有所帮助