为什么express-ejs-layout无法呈现layout.ejs?

时间:2016-09-13 02:14:13

标签: express layout ejs

在下面的配置中,select fn_get_member_fee (@member.id) from member 的内容似乎没有插入home.ejs页面的<%- body %>。点击默认路由layout.ejs会返回/中没有home.ejs结构或样式的内容。

我找不到任何有用的信息来解决layout.ejs的工作原理。有关为什么会这样的想法吗?

应用程序结构:

express-ejs-layouts

配置代码段:

.
├── app
├── main.js
├── node_modules
├── package.json
└── public
    ├── css
    │   └── style.css
    ├── js
    │   └── app.js
    └── views
        ├── layout.ejs
        └── pages
            ├── events.ejs
            ├── home.ejs
            └── test.ejs

路线:

// file: app/server.js

// template engine
app.set('view engine', 'ejs');
app.use(expressLayouts);

// set views directory
app.set('views', __dirname + '/../public/views');

app.use(express.static(__dirname + '/../public'));

EJS文件:

layout.js(摘录)

//file: app/controllers/mainController.js

exports.home = function(req,res){
    res.render('pages/home');
}

home.ejs

    <!--file: public/views/layout.ejs -->
...
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

        <link rel="stylesheet" href="../css/style.css">

        ...

            <main id="site-main">
                <div class="container">
                    <%- body %>
                </div>
            </main>
...

编辑1:

我上面的例子没有清楚地突出显示我在<!--file: public/views/pages/home.ejs --> This is the home page 之前将我的路线声明为app.use('/',router)。交换它解决了问题。

2 个答案:

答案 0 :(得分:1)

我只是使用您的文件结构设置了一个简单的Express服务器。如果我从客户端请求主页,我会收到:

<main id="site-main">
    <div class="container">
        This is the home page
    </div>
</main>

这就是你想要的,对吧? home.ejs的内容包含在layout.ejs

我想知道为什么它不适合你。我使用的简化server.js(注意没有特殊的路由文件):

var express = require('express');
var expressLayouts = require('express-ejs-layouts');

var app = express();

app.set('view engine', 'ejs');
app.use(expressLayouts);

app.set('views', __dirname + '/../public/views');
app.use(express.static(__dirname + '/../public'));

app.get('/', function(req, res) {
   res.render('pages/home');
});

app.listen(3000);

package.json中的我的依赖项:

{
  "ejs": "^2.5.2",
  "express": "^4.14.0",
  "express-ejs-layouts": "^2.2.0"
}

告诉我这是否适合您,然后我们可以研究您的配置问题是什么。

编辑:原来,OP在app.use('/',router);之前提出了他的路由声明app.use(expressLayouts);这就是为什么不考虑layout.ejs进行渲染的原因。

答案 1 :(得分:0)

在路线声明之前设置布局声明

喜欢这个..

    //set the layouts
    app.set('view engine', 'ejs');
    app.use(expressLayouts);

    //set the routes
    app.use(require('./app/routes'));