玉中的变量包括原因

时间:2016-03-11 09:26:51

标签: node.js templates variables include pug

我想在玉石模板中包含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}

感谢任何想法和提示。

1 个答案:

答案 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);
    });

您也可以使用异步功能 希望它有所帮助