无法在视图目录中查找视图“index.ejs”

问题描述 投票:0回答:11

我的 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 文件时,却没有。有什么问题吗?

javascript node.js express ejs
11个回答
16
投票

在请求任何视图文件之前,您需要设置您的

view
目录和
viewengine

因此,您需要在

app.get

之前添加以下行
app.set('views', './views');
app.set('view engine', 'ejs');

你的

res.render('index.ejs');
应该改为,

res.render('index');

希望这有帮助!


4
投票

首先你必须通过设置告诉express使用什么视图引擎

javascript
// set the view engine to ejs
app.set('view engine', 'ejs');

当引用视图时,您应该省略扩展名。因此,不要使用

res.render('index.ejs');
,而是使用
res.render('index');

不需要设置视图文件夹,因为您使用默认视图文件夹

views
来存储视图文件。


4
投票

这个问题基本上是当你的 ejs 查看引擎无法找到文件或文件夹时出现的。 因此,请执行以下检查:

1.检查目录名称。应该是“视图”而不是“视图”。

2.检查目录下的文件扩展名是否正确?它应该是

.ejs
,而不是其他像
.html
.json

3.告诉我将使用下面的代码来使用ejs视图引擎:

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

3
投票

您设置了视图文件夹吗?

app.set('views', './views')

2
投票

我用的是这个:

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);

0
投票

确保 public 文件夹中只有 css 文件。其他文件夹可以位于 public 文件夹之外。


0
投票

试试这个,它对我有用。

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

0
投票

在您的情况下,“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')


0
投票

模板引擎的快速指南讨论了设置“视图”和“视图引擎”。我还发现谈论冗余很重要/很有趣。全部详细如下。

设置“视图”

默认情况下,它会在名为“views”的子文件夹中查找模板文件(可以是 .ejs、.pug 等)。 因此,您可以设置这个名为“views”的子文件夹,其中包含 .ejs 文件,也可以将此“views”文件夹设置为您希望的任何文件夹。 例如,使用

app.set('views', './')

 将“views”文件夹设置为当前文件夹(即不需要子文件夹)。

设置“视图引擎”

指南还指出,您可以在使用时指定引擎(ejs、pug等)或指定文件扩展名,例如

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')
 命令。


-1
投票
确保您已更正带有 ejs 扩展名的文件名。 确保您已更正文件夹名称视图。 app.set('视图引擎', 'ejs')

它将正常工作


-3
投票
app.set('views', './View'); //./View(You already created folder) app.set('view engine', 'ejs'); res.render('index', { kindDay: day });
index 是我的 EJS 文件。
kindDay 是 EJS 文件创建的密钥。

© www.soinside.com 2019 - 2024. All rights reserved.