节点 Ejs 模块,包括不工作
Posted
技术标签:
【中文标题】节点 Ejs 模块,包括不工作【英文标题】:Node Ejs module, include not working 【发布时间】:2014-04-27 21:25:22 【问题描述】:在我的 index.html 中包含 html sn-ps 时遇到了一些问题。 我试图遵循 ejs 文档,但我似乎无法使其工作。
目录结构:
project
-public
--assets
---css
---images
---js
--Index
---index.html + index.css and index.js
--someOtherPageFolder
-views
--partials
---partials1.ejs
--index.ejs
--layout.ejs
-server.js
这是我的 server.js(新):
var express = require("express");
var partials = require("express-partials");
var http = require('http');
var path = require('path');
var app = express();
app.get("/", function(req, res)
res.redirect("index");
);
app.configure(function()
app.set('port', process.env.PORT || 8888);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(partials());
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(express.bodyParser());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
);
http.createServer(app).listen(app.get('port'), function()
console.log('App listening on port ' + app.get('port'));
);
这是我的 test.ejs:
<h1>This is test!</h1>
这就是我想要 html 片段去的地方:
<div id="sb-site">
<div class="">
<p>Not test</p>
<%- include test.html %>
</div>
</div>
我做错了什么? 有没有办法让我做到这一点并使用 .html 而不是 .ejs (我使用 eclipse,它不支持 .ejs 文件)
【问题讨论】:
Express'app.engine()
仅影响使用 res.render()
时识别的扩展名。它不会修改 express.static()
中间件发送的任何内容。
好的,谢谢。这是这个问题的解决方案还是 server.engine 是我真的不需要的东西?
您是否尝试在打开标记后添加连字符? <%- include test.html %>
??
另外,你为什么不使用与 express 捆绑的 ejs? app.set('view engine', 'ejs')
是的,我在 open 标记后尝试了一个连字符,并且我已经尝试将其更改为 ejs。我只是复制粘贴了错误的 server.js :P 谢谢
【参考方案1】:
包含你应该这样做:
<%- include ("./partials/footer") %>
【讨论】:
【参考方案2】:Express 3 打破 ejs 部分,改用express-partials
。
// Include it like so with your other modules
var express = require("express");
var partials = require('express-partials');
var server = express();
// Finally add it into your server conviguration
server.configure(function()
server.set('view engine', 'ejs');
// Include partials middleware into the server
server.use(partials());
);
在您的.ejs
视图中,享受这样的奢华......
<%- include ../partials/header %>
<section id="welcome">
Welcome
</section>
<%- include ../partials/footer %>
另外,不要将 ejs 模块设置为读取 .html
,只需按照此答案让 eclipse 将 .ejs
呈现为 .html
。 how do i get eclipse to interpret .ejs files as .html?
举个例子,这是如何设置基本的 express 结构...
project
--public
--views
----layout.ejs
----index.ejs
----partials
------partial1.ejs
--server.js
server.js 看起来像...
var express = require('express'),
partials = require('express-partials'),
http = require('http'),
path = require('path');
var app = express();
// all environments
app.configure(function()
app.set('port', process.env.PORT || 3838);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
// Middleware
app.use(partials());
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
);
http.createServer(app).listen(app.get('port'), function()
console.log('App listening on port ' + app.get('port'));
);
你的路线看起来像......
server.get("/", function(req, res)
res.render("index");
);
最后,你的 layout.ejs...
<html>
<head>
<title></title>
</head>
<body>
<%- body %>
</body>
</html>
和 index.ejs ...
<div id="index">
<%- include partial1.ejs %>
</div>
如果您需要参考工作示例,here it is
【讨论】:
谢谢!但我似乎仍然无法让它工作?我已经完成了上述所有操作,但是当我访问该站点时,它只会下载 index.ejs 文件。而且我认为我不理解“在您的 .ejs 视图中..”。我的 .ejs 文件是否需要一个单独的文件夹?不过这看起来好多了:) 是的,您是否在配置中添加了server.set('views', __dirname + '/views');
?你需要为你的视图添加一个目录。
我现在添加了 server.set('views', __dirname + '/views'); + server.use(express.static('public', __dirname + '/public'));我的 index.html 在我的 /public 文件夹中。然后我是否包含 /views 文件夹中的 .ejs 文件?
是的!布局和所有视图都放在视图文件夹中,请参阅我的编辑,在“您的路由器看起来像...”下查看如何呈现视图。
对于所有视图,我的意思是所有 .ejs 文件都驻留在您的视图目录中以上是关于节点 Ejs 模块,包括不工作的主要内容,如果未能解决你的问题,请参考以下文章
使用 ejs 模板和 MYSQL 在节点 js 中的服务器端分页
为啥我的 For 循环在 EJS 节点 js 中只返回一个值?