【问题标题】:Variable in a Jade include cause玉中的变量包括原因
【发布时间】:2016-06-26 11:22:09
【问题描述】:

我想在翡翠模板中包含一个 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 i

include ../static/show/newSite.html

一切都很好。我也试过管道(见Use a variable in a Jade include

|!{lpath}

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

【问题讨论】:

    标签: node.js templates variables include pug


    【解决方案1】:

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

    你也可以使用异步函数 希望对你有帮助

    【讨论】:

    • 感谢您的快速回答。它现在工作正常。但是您的代码中有一个小错误。在您的 sn-p 中查看 cmets。
    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 2020-03-23
    相关资源
    最近更新 更多