【问题标题】:Failed to lookup view "index.ejs" in views directory无法在视图目录中查找视图“index.ejs”
【发布时间】:2018-07-08 10:55:04
【问题描述】:

我的 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


    【解决方案1】:

    在请求任何视图文件之前,您需要设置 view 目录和 viewengine

    因此您需要在 app.get 之前添加以下行

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

    你的res.render('index.ejs');应该改成,

    res.render('index');
    

    希望这会有所帮助!

    【讨论】:

    • 我试过了,但它仍然显示:错误:无法在视图目录“./views”中查找视图“索引”
    • 当你尝试时会发生什么,app.set('views', './myapp/views');
    • 相同,错误:无法在视图目录“./myapp/views”中查找视图“索引”
    • 我的错,我已经发现了错误。这是因为我保存的文件实际上是 index.ejs.html 出于某种原因。现在更正了。
    【解决方案2】:

    你设置了views文件夹吗?

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

    【讨论】:

      【解决方案3】:

      首先你必须通过设置告诉 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');
        

        【讨论】:

          【解决方案5】:

          确保公用文件夹中只有 css 文件。其他文件夹可以在公用文件夹之外。

          【讨论】:

          • 这真的是这里的问题吗?
          【解决方案6】:

          试试这个它对我有用。

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

          【讨论】:

            【解决方案7】:

            我用过这个:

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

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                【解决方案9】:
                app.set('views', './View'); //./View(You already created folder)
                app.set('view engine', 'ejs');
                res.render('index', { kindDay: day });
                

                index 是我的 EJS 文件。 kindDay 是 EJS 文件创建的密钥。

                【讨论】:

                  猜你喜欢
                  • 2018-11-01
                  • 2017-01-14
                  • 2020-08-08
                  • 2017-12-20
                  • 2015-11-03
                  • 1970-01-01
                  • 2022-11-30
                  • 2021-06-26
                  • 2021-04-03
                  相关资源
                  最近更新 更多