Nodejs中html映射到ejs处理的问题

发布于 1周前 作者 ionicwang 来自 nodejs/Nestjs

Nodejs中html映射到ejs处理的问题

app.register(’.html’, require(‘ejs’)); 为什么提示没有register方法?

4 回复

Node.js 中 HTML 映射到 EJS 处理的问题

在使用 EJS 渲染模板时,你可能会遇到一些问题。例如,尝试将 .html 文件扩展名与 EJS 集成时,可能会出现 register 方法不存在的错误。这是因为现代版本的 Express 框架不再支持 app.register 方法。

示例代码

假设你有一个简单的 Express 应用,并且你想使用 EJS 来渲染 .html 文件。你需要通过修改应用的默认视图引擎来实现这一点。

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

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

// 设置 views 目录路径
app.set('views', path.join(__dirname, 'views'));

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

// 启动服务器
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  1. 设置视图引擎

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

    这行代码设置了默认的视图引擎为 EJS。

  2. 指定 views 目录

    app.set('views', path.join(__dirname, 'views'));

    这行代码指定了存放模板文件的目录。默认情况下,Express 在 views 目录下查找模板文件。

  3. 渲染 HTML 文件

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

    使用 res.render 方法渲染 .html 文件。注意这里传入的文件名是 index.html,而不是 index.ejs。因为 EJS 引擎会自动处理 .ejs 扩展名。

注意事项

  • 确保你的 .html 文件实际上是一个 EJS 模板文件(即包含 <%-<%= %> 等 EJS 语法)。
  • 如果你希望直接使用 .html 扩展名而不是 .ejs,可以考虑创建一个中间件来处理这种映射关系。

通过这种方式,你可以解决 register 方法不存在的问题,并成功地将 HTML 文件映射到 EJS 模板引擎。


原来现在用app.engine(’.html’, require(‘ejs’).__express);搞定

看代码好像是express,查看下版本吧。

在Node.js中,如果你想要将.html文件映射到EJS模板引擎,你需要使用一个中间件来处理这个映射。Express框架是一个常用的Node.js Web应用框架,它可以帮助你轻松地实现这一点。

默认情况下,Express并没有app.register()方法。你可以通过设置静态文件服务和视图引擎来实现类似的效果。以下是如何配置Express来使用EJS作为模板引擎,并将HTML文件映射到EJS模板:

示例代码

  1. 安装必要的依赖:

    npm install express ejs
  2. 创建一个简单的Express应用,并设置EJS作为视图引擎:

    const express = require('express');
    const app = express();
    
    // 设置视图引擎为EJS
    app.set('view engine', 'ejs');
    
    // 静态文件服务(可选)
    app.use(express.static('public'));
    
    // 示例路由
    app.get('/', (req, res) => {
        res.render('index', { title: 'Hello from EJS' });
    });
    
    // 启动服务器
    app.listen(3000, () => {
        console.log('Server is running on port 3000');
    });
  3. 在项目中创建一个名为views的目录,并在其中创建一个名为index.ejs的文件,内容如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title><%= title %></title>
    </head>
    <body>
        <h1>Welcome to <%= title %></h1>
    </body>
    </html>
  4. 如果你想直接使用.html扩展名来渲染EJS模板,可以通过自定义路由来实现:

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

解释

在这个例子中,我们设置了EJS作为视图引擎,并通过路由来处理不同的请求。res.render()方法会自动查找views目录下的EJS文件,并将其内容渲染为HTML响应。如果你想直接使用.html扩展名来访问EJS模板,可以创建一个特定的路由来处理这些请求。

这样,你就能够使用EJS模板引擎来处理.html文件了。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!