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模版,还出现这个让我很不解,不知道大家有没有遇见这种情况
在使用 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');
});
关键点解释
-
设置模板引擎:
app.set('view engine', 'ejs');
这行代码告诉 Express 使用 EJS 作为默认的模板引擎。你不需要手动调用
app.engine('.ejs', require('ejs').__express)
,因为app.set('view engine', 'ejs')
已经做了这件事。 -
设置视图路径:
app.set('views', __dirname + '/views');
这行代码指定了存放 EJS 模板文件的目录。
__dirname
是当前文件所在的目录路径。 -
渲染模板:
app.get('/', function (req, res) { res.render('login', { title: '登录页面', message: '欢迎使用本系统' }); });
这里我们渲染
login.ejs
模板文件,并传递了一些数据给模板。 -
启动服务器:
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);
通过以上步骤,你应该能够解决遇到的问题。如果问题仍然存在,请检查是否有其他配置或依赖项导致冲突。