Nodejs express 中关于ejs模版的问题

Nodejs express 中关于ejs模版的问题

根据express官网的指引 var express = require(‘express’) var app = express() var login = require(’./controller/login’); var partials = require(‘express-partials’); app.engine(’.ejs’, require(‘ejs’).__express) app.set(‘views’, __dirname + ‘/views’); app.set(‘view engine’, ‘ejs’); app.use(partials())

app.get('/', function (req, res) {
	res.render('login',{});
	//res.send('Hello World')
})

app.listen(3000)

我第一是设置了模版的引擎,然后use了partials

但是得到的错误信息是:Error: No default engine was specified and no extension was provided.

我既然已经自己设置了ejs模版,还出现这个让我很不解,不知道大家有没有遇见这种情况


3 回复

在使用 Express 和 EJS 模板引擎时,如果遇到 Error: No default engine was specified and no extension was provided 这个错误,通常是因为你没有正确地设置模板引擎或者路径问题。以下是一个详细的解决方案,包括示例代码和解释。

示例代码

首先,确保你的项目结构如下:

myapp/
├── app.js
├── views/
│   └── login.ejs
└── controller/
    └── login.js

代码详解

1. 设置模板引擎和视图路径

var express = require('express');
var app = express();
var loginController = require('./controller/login');

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

// 设置视图文件夹路径
app.set('views', __dirname + '/views');

// 使用 partials 插件(如果需要)
var partials = require('express-partials');
app.use(partials());

// 定义路由
app.get('/', function (req, res) {
    // 渲染 login.ejs 文件,并传递数据
    res.render('login', {
        title: '登录页面',
        message: '欢迎使用本系统'
    });
});

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

关键点解释

  1. 设置模板引擎

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

    这行代码告诉 Express 使用 EJS 作为默认的模板引擎。你不需要手动调用 app.engine('.ejs', require('ejs').__express),因为 app.set('view engine', 'ejs') 已经做了这件事。

  2. 设置视图路径

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

    这行代码指定了存放 EJS 模板文件的目录。__dirname 是当前文件所在的目录路径。

  3. 渲染模板

    app.get('/', function (req, res) {
        res.render('login', {
            title: '登录页面',
            message: '欢迎使用本系统'
        });
    });
    

    这里我们渲染 login.ejs 模板文件,并传递了一些数据给模板。

  4. 启动服务器

    app.listen(3000, function () {
        console.log('Server is running on port 3000');
    });
    

    最后,启动服务器并监听端口 3000。

总结

通过上述步骤,你应该可以成功解决 Error: No default engine was specified and no extension was provided 的问题。确保模板文件名与你在 res.render 中指定的一致,并且路径正确。如果你仍然遇到问题,请检查文件路径和拼写错误。


express -e ejs microblog 还是用 exoress自己生成的基本文件把

你遇到的错误是因为在调用 res.render 方法时,没有指定 .ejs 文件的扩展名。当你设置 app.set('view engine', 'ejs') 时,Express 默认会在模板文件后面添加 .ejs 扩展名。但是,在某些情况下,可能需要显式地提供扩展名。

你可以尝试以下几种方法来解决这个问题:

方法1:确保正确设置视图引擎

确保你的设置部分是正确的,这通常不需要更改:

var express = require('express');
var app = express();
var login = require('./controller/login');
var partials = require('express-partials');

app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');

// 如果你需要使用自定义的 EJS 引擎
app.engine('.ejs', require('ejs').__express);

app.use(partials());

方法2:确保在渲染时提供正确的文件名

在调用 res.render 方法时,确保只提供文件名(不带扩展名):

app.get('/', function (req, res) {
    res.render('login'); // 这里不带 .ejs 扩展名
});

方法3:检查文件路径

确保 login.ejs 文件位于 views 目录下。例如,如果你的项目结构如下:

project/
├── views/
│   └── login.ejs
├── app.js
└── ...

那么上述代码应该可以正常工作。

示例代码

下面是完整的示例代码,确保所有设置都正确无误:

var express = require('express');
var app = express();
var login = require('./controller/login');
var partials = require('express-partials');

app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');

// 如果你需要使用自定义的 EJS 引擎
app.engine('.ejs', require('ejs').__express);

app.use(partials());

app.get('/', function (req, res) {
    res.render('login'); // 这里不带 .ejs 扩展名
});

app.listen(3000);

通过以上步骤,你应该能够解决遇到的问题。如果问题仍然存在,请检查是否有其他配置或依赖项导致冲突。

回到顶部