Nodejs中bootstrap layout.ejs 是如何被调用的?

Nodejs中bootstrap layout.ejs 是如何被调用的?

再看NodeJs中文开发文档中,有一个博客的demo,前端设计应用到bootstrap ,疑问的是index.ejs是如何关联layout.ejs?

3 回复

Nodejs中bootstrap layout.ejs 是如何被调用的?

在Node.js应用中,使用EJS模板引擎时,layout.ejs通常作为布局文件,用于定义页面的基本结构和样式。而index.ejs则是具体的内容页,它会被嵌入到layout.ejs中,从而实现页面的布局和内容分离。

示例代码

假设我们有一个简单的Node.js应用,使用Express框架,并且应用了Bootstrap样式。

  1. 安装必要的依赖

    首先确保你已经安装了expressejs模块:

    npm install express ejs
    
  2. 创建项目结构

    创建一个基本的项目结构:

    /project
    ├── /views
    │   ├── index.ejs
    │   └── layout.ejs
    ├── app.js
    └── package.json
    
  3. 编写 layout.ejs

    views目录下创建layout.ejs文件,定义基本的HTML结构和Bootstrap样式:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title><%= title %></title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
    </head>
    <body>
        <nav class="navbar navbar-expand-lg navbar-light bg-light">
            <a class="navbar-brand" href="#">My App</a>
            <div class="collapse navbar-collapse" id="navbarNav">
                <ul class="navbar-nav">
                    <li class="nav-item active">
                        <a class="nav-link" href="/">Home</a>
                    </li>
                </ul>
            </div>
        </nav>
        <div class="container">
            <%- body %>
        </div>
    </body>
    </html>
    
  4. 编写 index.ejs

    views目录下创建index.ejs文件,这是具体内容页:

    <h1>Welcome to My Blog!</h1>
    <p>This is the home page of my blog.</p>
    
  5. 配置Express

    app.js中配置Express以使用EJS模板引擎:

    const express = require('express');
    const path = require('path');
    const app = express();
    
    // 设置视图引擎为EJS
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'ejs');
    
    // 定义路由
    app.get('/', (req, res) => {
        res.render('index', { title: 'Home' });
    });
    
    app.listen(3000, () => {
        console.log('Server is running on port 3000');
    });
    

解释

  • layout.ejs 文件定义了页面的基本结构,包括导航栏和容器。
  • index.ejs 文件只包含具体内容,如欢迎信息。
  • 使用<%- body %>标签将index.ejs的内容插入到layout.ejs中的<div class="container">标签内。
  • 在Express中,通过res.render('index', { title: 'Home' }); 渲染index.ejs,并将其内容传递给layout.ejs

这样,每次访问首页时,index.ejs的内容就会被插入到layout.ejs中,形成完整的页面。


在Node.js应用中使用EJS模板引擎时,layout.ejsindex.ejs 文件之间的关系是通过布局继承来实现的。布局文件(如layout.ejs)定义了页面的基本结构,而具体内容页面(如index.ejs)则继承了这个布局,并填充具体的内容。

示例代码

1. 安装 EJS 模块

确保你已经在项目中安装了EJS模块:

npm install ejs --save

2. 创建 layout.ejs

这是一个基本的Bootstrap布局文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><%- title %></title>
    <!-- 引入 Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
    <nav class="navbar navbar-expand-lg navbar-light bg-light">
        <a class="navbar-brand" href="#">Navbar</a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarNav">
            <ul class="navbar-nav">
                <li class="nav-item active">
                    <a class="nav-link" href="/">Home <span class="sr-only">(current)</span></a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="/about">About</a>
                </li>
            </ul>
        </div>
    </nav>

    <div class="container mt-3">
        <%- body %>
    </div>

    <!-- 引入 Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>

3. 创建 index.ejs

这是具体的页面内容文件,它将继承上述布局文件:

<% layout('layout') %>

<h1>Welcome to the Home Page</h1>
<p>This is the home page of your blog.</p>

4. 设置 EJS 作为视图引擎

在你的Node.js应用中,需要设置EJS作为视图引擎。例如,在Express应用中,你可以这样做:

const express = require('express');
const app = express();

// 设置 EJS 为视图引擎
app.set('view engine', 'ejs');

app.get('/', (req, res) => {
    res.render('index', { title: 'Home Page' });
});

app.listen(3000, () => console.log('Server running on port 3000'));

这样,当你访问首页时,index.ejs 将继承并渲染 layout.ejs 中定义的布局,同时填充自己的内容。

解释

  • <%- body %>:在layout.ejs中,这一行用于插入继承它的子视图的内容。
  • <%- title %>:同样地,这一行用于插入从子视图传递过来的数据。
  • <% layout('layout') %>:在子视图中,这一行声明了该视图继承自哪个布局文件。

以上步骤展示了如何在Node.js应用中使用EJS模板引擎来组织和渲染页面,使得布局与内容分离。

回到顶部