Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用node.js包含HTML块_Node.js_Include_Express_Templating_Ejs - Fatal编程技术网

使用node.js包含HTML块

使用node.js包含HTML块,node.js,include,express,templating,ejs,Node.js,Include,Express,Templating,Ejs,这是我想要的,但可能无法得到: 使用node.js和express,也许还有ejs,我希望在我的client dir中编写一个常规的HTML文件时,服务器端包含一个HTML模板块。如果我可以将变量从HTML文档传递到include中,那也会很酷 例如: <!doctype html> <html> <head> <%include head, ({title: "Main Page"}) %> </head>

这是我想要的,但可能无法得到:

使用node.js和express,也许还有ejs,我希望在我的client dir中编写一个常规的HTML文件时,服务器端包含一个HTML模板块。如果我可以将变量从HTML文档传递到include中,那也会很酷

例如:

 <!doctype html>
 <html>
   <head>
    <%include head, ({title: "Main Page"}) %>   
   </head>
   <body>
      <% include header, ({pageName: "Home", color: "red"}) %>
    ...
      <<% include footer%>>
   </body>
 </html>

...
节点世界中有这样的东西吗?或者任何接近的东西,可能适合这个功能?我不会完全按照这里指示的方式使用它,但这是我正在寻找的功能

我已经调查过玉、车把、余烬和ejs,ejs似乎是最接近的。也许其中一个已经做到了,但我只是对实现感到困惑

任何建议都很好

我会推荐或。Nunjucks受jinja启发,而pejs只是ejs+继承、块和文件支持

pejs目前在空间吞噬方面存在一些问题,但它仍然非常有用。在这两者中,我更喜欢NUNJUK附带的分离层


它非常酷,有您正在寻找的功能集,但是它有一个非常独特的语法。jade的引用:,

jade允许服务器端包含HTML块,任何局部变量都将传递到包含的jade模板。但是如果您想这样做,这两个文件必须是jade语法格式,而不是原始HTML

您想要传递的任何变量都可以添加到本地对象。

好的,我知道了

server.js

 var express =      require('express');
 var server  =      express();
 var ejs = require('ejs'); 
 ejs.open = '{{'; 
 ejs.close = '}}';


 var oneDay = 86400000;
 server.use(express.compress());

 server.configure(function(){
   server.set("view options", {layout: false});  
   server.engine('html', require('ejs').renderFile); 
   server.use(server.router);
   server.set('view engine', 'html');
   server.set('views', __dirname + "/www");
 });


 server.all("*", function(req, res, next) {
     var request = req.params[0];

         if((request.substr(0, 1) === "/")&&(request.substr(request.length - 4) === "html")) {
         request = request.substr(1);
         res.render(request);
     } else {
         next();
     }

 });

 server.use(express.static(__dirname + '/www', { maxAge: oneDay }));

 server.listen(process.env.PORT || 8080);
在/www中,我有以下.html文件:

index.html

      {{include head.html}}
 {{include header.html}}

 <p class="well">Hello world!</p>

 {{include footer.html}}
然后,您可以从include中调用这些变量,不管它们嵌套得有多深

例如,index.html包括start.html,start.html包括header.html。在header.html中,我可以在header中调用{{=projectName}},即使它是在index.html中声明的

我把整件事都说了出来

通过这种方式,您可以在任何包含HTML的文件夹中调用HTML。 如果您想包含CSS和Javascript,请使用express.static,请参阅最后一部分 代码行

你必须使用
 <!DOCTYPE html>
 <!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
 <!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
 <!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
 <!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
     <head>
         <meta charset="utf-8">
         <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
         <title></title>
         <meta name="description" content="">
         <meta name="viewport" content="width=device-width">

         {{include include.css.html}}

         <script src="js/vendor/modernizr-2.6.2.min.js"></script>
     </head>
     <body>     
      <link rel="stylesheet" href="css/normalize.css">
      <link rel="stylesheet" href="css/bootstrap.css">
      <link rel="stylesheet" href="css/bootstrap-responsive.css">
      <link rel="stylesheet" href="css/main.css">
 <div class="well">
      <h1>HEADER</h1>
 </div>
         <div class="well">
             <h1>FOOTER</h1>
         </div>


         <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
         <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.9.1.min.js"><\/script>')</script>
         <script src="js/plugins.js"></script>
         <script src="js/bootstrap.min.js"></script>
         <script src="js/main.js"></script>

         <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
         <script>
             var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
             (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
             g.src='//www.google-analytics.com/ga.js';
             s.parentNode.insertBefore(g,s)}(document,'script'));
         </script>
     </body>
 </html>
 {{
    var pageTitle = 'Project Page';
    var projectName = 'Project Title';
 }}
var express = require('express');
var app = express();
var path = require('path');

app.get("/" ,(req,res) => {
     res.sendFile(path.join(__dirname+'../../templates/index.html')); 
});
app.use(express.static(path.join(__dirname+'../../templates/public')));