【问题标题】:Error: Failed to lookup view "/listings" in views directory错误:无法在视图目录中查找视图“/listings”
【发布时间】:2021-05-23 05:37:08
【问题描述】:

我在视图目录中收到错误Error: Failed to lookup view "/listings",我尝试将app.set('views', path.join(__dirname, 'views')); 移动到 app.set('view engine', 'ejs');反之亦然没有运气。同样在 app.get 我做了('/listings/index) 仍然一无所获。

我的文件结构

node_modules
views\listings
   listings.ejs
index.js
package-lock.json
package.json

index.js

const express = require('express');
const app = express();
const path = require('path');


app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));




let listings = [{
        listingAgent: 'Todd Barkley',
        Review: 'Awesome Agent'
    },
    {
        listingAgent: 'David Smith',
        Review: 'Good agent'
    },
    {
        listingAgent: 'Erick Jones',
        Review: 'Terrible agent, glad we fired him'
    }
]


app.get('/listings', (req, res) => {
    res.render('/listings', { listings });
})

app.listen(4000, () => {
    console.log("On port 4000")
})

index.ejs

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Public Listings</title>
</head>

<body>
    <h1>Public Listings</h1>
    <ul>
        <% for (let l of listings ) {%>
            <li>
                <%= l.Review %>
                    <b><%=l.listingAgent  %> </b>
            </li>
            <% } %>
    </ul>
</body>

</html>

package.json

{
  "name": "practicerest",
  "version": "1.0.0",
  "description": "Practice ",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Manny Verma",
  "license": "ISC",
  "dependencies": {
    "ejs": "^3.1.6",
    "express": "^4.17.1"
  }
}

【问题讨论】:

  • 你能在问题中添加对你的目录结构的描述吗?
  • 我在问题中添加了我的文件结构。
  • 所以HTML内容在文件index.ejslistings.ejs?
  • 它在listings.ejs中
  • 我的要求好还是需要重新订购?怎么放进去有关系吗?

标签: javascript node.js ejs package.json


【解决方案1】:

首先确保views 文件夹的名称正确。其次,检查文件扩展名是否正确,最后检查渲染中的路径:

app.get('/listings', (req, res) => {
    res.render('listings', { listings }); // remove the slash to get the correct path
})

【讨论】:

    【解决方案2】:

    首先,您的 ejs 文件名为 index,但您正在尝试渲染不存在的 listings 文件。

    其次,您不需要在文件名前使用/

    解决方案

    所以基本上您所要做的就是将您的 ejs 文件名更改为 listings 或将渲染参数更改为 index

    最后,删除文件名前的/

    //index.ejs
    app.get('/listings', (req, res) => {
        res.render('index', { listings });
    })
    
    //listings.ejs
    app.get('/listings', (req, res) => {
        res.render('listings', { listings });
    })
    

    【讨论】:

    • 我得到了同样的错误,我尝试了 index.ejs 和 listings.ejs 我仍然得到失败的查找视图“listings”
    • 幸运的是,您现在似乎已经解决了这个问题。但如果我的解决方案没有解决问题,可能是因为文件结构。
    【解决方案3】:

    因为文件listings.ejsviews\listings文件夹中,所以代码应该是:

    app.get('/listings', (req, res) => {
        res.render('listings/listings', { listings });
    })
    

    【讨论】:

    • 非常感谢它现在可以使用了。谢谢大家。
    猜你喜欢
    • 2018-11-01
    • 1970-01-01
    • 2017-01-14
    • 2017-12-20
    • 2021-06-26
    • 2021-04-03
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多