gpt4 book ai didi

node.js - 使用 node.js 包含 HTML block

转载 作者:IT老高 更新时间:2023-10-28 23:10:08 26 4
gpt4 key购买 nike

这是我想要的,但可能没有:

使用 node.js 和 express 或者 ejs,我想在我的客户端目录中编写一个常规的 HTML 文件时,服务器端包含一个 HTML 模板 block 。如果我可以将变量从 HTML 文档传递到包含中,那也很酷。

有点像:

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

在 Node 世界中是否有像这样工作的任何东西?或者任何接近并且可能适合此功能的东西?我不会完全按照此处指示的方式使用它,但这是我正在寻找的功能。

我研究过 Jade 、 Handlebars 、ember 和 ejs,ejs 似乎是最接近的。也许其中之一已经这样做了,但我只是对实现感到困惑。

任何建议都会很棒!

最佳答案

好的,我明白了...

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

head.html

 <!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>

include_css.html

      <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">

header.html

 <div class="well">
<h1>HEADER</h1>
</div>

页脚.html

         <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>

这一切都通过,甚至包括在包含和静态内容中。这一切都是在 html 文件上执行的,并且在感觉就像 vanilla web 创作的上下文中执行。

++++糟糕+++++嗯,我几乎所有的。我忘记了我还希望能够将变量从模板传递到包含中。我还没有尝试过……有什么想法吗?

++++更新+++++

好的,我想通了。

This讨论清楚了,我想我只是对 ejs 是如何工作的了解不够。

我已将 index.html 更改为以变量声明开头:

 {{
var pageTitle = 'Project Page';
var projectName = 'Project Title';
}}

然后您可以从包含中调用这些变量,无论它们嵌套多深。

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

我已经把全部内容放在 github 上.

关于node.js - 使用 node.js 包含 HTML block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16369649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com