节点 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 是我真的不需要的东西? 您是否尝试在打开标记后添加连字符? &lt;%- include test.html %&gt;?? 另外,你为什么不使用与 express 捆绑的 ejs? app.set('view engine', 'ejs') 是的,我在 open 标记后尝试了一个连字符,并且我已经尝试将其更改为 ejs。我只是复制粘贴了错误的 server.js :P 谢谢 【参考方案1】:

包含你应该这样做:

&lt;%- include ("./partials/footer") %&gt;

【讨论】:

【参考方案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 中只返回一个值?

在 express 节点 js 中重新渲染 EJS 模板

节点 JS 堆栈。通过 Jquery 和 AJAX 发布 ejs 数据时遇到问题

在工作节点上安装 SPARK 模块

删除不必要的节点模块