我的 Express 应用程序(app.js 文件)中有以下代码:
const express = require("express");
const app = express();
app.set('view engine', 'ejs');
app.get('/', function(req, res) {
res.render('index');
});
app.listen(8080);
以及以下依赖项:
"ejs": "^2.6.1",
"express": "^4.16.3",
"request": "^2.87.0"
这是我的文件夹结构:
myapp
app.js
package.json
views
index.ejs
node_modules
[all node files]
但是当我运行该应用程序时,它显示此错误:
Failed to lookup view "index.ejs" in views directory "mylocaldirectory/myapp/views"
如果有帮助,这里是其他错误消息:
at Function.render (/mylocaldirectory/myapp/node_modules/express/lib/application.js:580:17)
at ServerResponse.render (/mylocaldirectory/myapp/node_modules/express/lib/response.js:1008:7)
at //mylocaldirectory/myapp/app.js:11:9
at Layer.handle [as handle_request] (/mylocaldirectory/myapp/node_modules/express/lib/router/layer.js:95:5)
at next (/mylocaldirectory/myapp/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/mylocaldirectory/myapp/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/mylocaldirectory/myapp/node_modules/express/lib/router/layer.js:95:5)
at /mylocaldirectory/myapp/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/mylocaldirectory/myapp/node_modules/express/lib/router/index.js:335:12)
at next (/mylocaldirectory/myapp/node_modules/express/lib/router/index.js:275:10)
如果我只使用
res.send("SOME TEXT")
,我不会收到错误,但是当我尝试渲染 ejs 文件时,却没有。有什么问题吗?
在请求任何视图文件之前,您需要设置您的
view
目录和 viewengine
。
因此,您需要在
app.get
之前添加以下行
app.set('views', './views');
app.set('view engine', 'ejs');
你的
res.render('index.ejs');
应该改为,
res.render('index');
希望这有帮助!
首先你必须通过设置告诉express使用什么视图引擎
javascript
// set the view engine to ejs
app.set('view engine', 'ejs');
当引用视图时,您应该省略扩展名。因此,不要使用
res.render('index.ejs');
,而是使用 res.render('index');
。
不需要设置视图文件夹,因为您使用默认视图文件夹
views
来存储视图文件。
这个问题基本上是当你的 ejs 查看引擎无法找到文件或文件夹时出现的。 因此,请执行以下检查:
1.检查目录名称。应该是“视图”而不是“视图”。
2.检查目录下的文件扩展名是否正确?它应该是
.ejs
,而不是其他像.html
或.json
等
3.告诉我将使用下面的代码来使用ejs视图引擎:
app.set('view engine','ejs');
您设置了视图文件夹吗?
app.set('views', './views')
我用的是这个:
const express = require("express");
const server = express();
const path = require("path");
server.set("views", path.join(__dirname, "views"));
server.set("view engine", "ejs");
server.use(express.static("public"));
server.get("/", (req, res) => {
res.render("index");
});
server.listen(8080);
确保 public 文件夹中只有 css 文件。其他文件夹可以位于 public 文件夹之外。
试试这个,它对我有用。
// view engine setup
app.set('view engine', 'ejs');
app.set('views', __dirname + '/views');
在您的情况下,“app.set”功能无法找到“views”文件夹。
所以使用以下...
app.set('views', __dirname + '/views')
app.set('view engine', 'ejs')
或者您可以按照以下方式操作
const path = require('path')
//path is inbuilt module in nodejs, so don't need to install it.
app.set('views', path.join(__dirname, '/views'))
app.set('view engine', 'ejs')
两种方法都是一样的。
__dirname 将连接“views”文件夹的绝对路径。
(注意:请注意,与绝对目录路径连接时不应存在 . is 。 所以不要在 __dirname 之后使用 './views',仅使用 '/views')
模板引擎的快速指南讨论了设置“视图”和“视图引擎”。我还发现谈论冗余很重要/很有趣。全部详细如下。
设置“视图”app.set('views', './')
将“views”文件夹设置为当前文件夹(即不需要子文件夹)。设置“视图引擎”
res.render(<filename>)
。冗余
app.set('views', './views');
app.set('view engine', 'ejs');
app.get("/", function(req,res) {
res.render("index.ejs");
});
具有类似的文件夹结构
myapp
app.js
package.json
views
index.ejs
node_modules
[all node files]
由于您有一个名为“views”的文件夹,其中的 .ejs 文件与 app.js 文件位于同一级别,因此您可以省略 app.set('views', './views')
命令。由于您使用文件扩展名调用
res.render
,因此可以省略
app.set('view engine', 'ejs')
命令。
它将正常工作
app.set('views', './View'); //./View(You already created folder)
app.set('view engine', 'ejs');
res.render('index', { kindDay: day });
index 是我的 EJS 文件。
kindDay 是 EJS 文件创建的密钥。