NodeJS 参考错误:未定义路径:EJS

nwlqm0z1  于 2023-06-22  发布在  Node.js
关注(0)|答案(6)|浏览(171)

该应用程序运行的商店和管理员路线,但不工作的错误路线。错误路线也是在MVC格式,但我测试了它没有架构也。
下面是根目录中的app.js片段。

const path = require('path');

const express = require('express');
const bodyParser = require('body-parser');

const errorController = require('./controllers/error');

const app = express();

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

const adminRoutes = require('./routes/admin');
const shopRoutes = require('./routes/shop');

app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));

app.use('/admin', adminRoutes);
app.use(shopRoutes);

app.use((req, res, next) => {
  res.status(404).render('404', { pageTitle: 'Page Not Found' });
});

app.listen(3000);

404 EJS代码是

<%- include('includes/head.ejs') %>
</head>

<body>
    <%- include('includes/navigation.ejs') %>
    <h1>Page Not Found!</h1>

<%- include('includes/end.ejs') %>

而且,Navigation.ejs是

<header class="main-header">
    <nav class="main-header__nav">
        <ul class="main-header__item-list">
            <li class="main-header__item">
                <a class="<%= path === '/' ? 'active' : '' %>" href="/">Shop</a>
            </li>
            <li class="main-header__item">
                <a class="<%= path === '/admin/add-product' ? 'active' : '' %>" href="/admin/add-product">Add Product</a>
            </li>
        </ul>
    </nav>
</header>

它显示以下错误:

ReferenceError: C:\Users\Najus\Desktop\New folder\views\404.ejs:5
    3| 
    4| <body>
 >> 5|     <%- include('includes/navigation.ejs') %>
    6|     <h1>Page Not Found!</h1>
    7| 
    8| <%- include('includes/end.ejs') %>

C:\Users\Najus\Desktop\New folder\views\includes\navigation.ejs:6
    4|         <ul class="main-header__item-list">
    5|             <li class="main-header__item">
 >> 6|                 <a class="<%= path === '/' ? 'active' : '' %>" href="/">Shop</a>
    7|             </li>
    8|             <li class="main-header__item">
    9|                 <a class="<%= path === '/admin/add-product' ? 'active' : '' %>" href="/admin/add-product">Add Product</a>

path is not defined
    at eval (eval at compile (C:\Users\Najus\Desktop\New folder\node_modules\ejs\lib\ejs.js:618:12), <anonymous>:11:26)
    at returnedFn (C:\Users\Najus\Desktop\New folder\node_modules\ejs\lib\ejs.js:653:17)
    at include (C:\Users\Najus\Desktop\New folder\node_modules\ejs\lib\ejs.js:651:39)
    at eval (eval at compile (C:\Users\Najus\Desktop\New folder\node_modules\ejs\lib\ejs.js:618:12), <anonymous>:12:17)
    at returnedFn (C:\Users\Najus\Desktop\New folder\node_modules\ejs\lib\ejs.js:653:17)
    at tryHandleCache (C:\Users\Najus\Desktop\New folder\node_modules\ejs\lib\ejs.js:251:36)
    at View.exports.renderFile [as engine] (C:\Users\Najus\Desktop\New folder\node_modules\ejs\lib\ejs.js:482:10)
    at View.render (C:\Users\Najus\Desktop\New folder\node_modules\express\lib\view.js:135:8)
    at tryRender (C:\Users\Najus\Desktop\New folder\node_modules\express\lib\application.js:640:10)
    at Function.render (C:\Users\Najus\Desktop\New folder\node_modules\express\lib\application.js:592:3)

我已经尝试了各种方法来回查找互联网和无法找到的方式来调整代码。

iqih9akk

iqih9akk1#

原因是路径未定义,所以在导航中。ejs无法找到路径的值,因此要解决这个问题,您应该在render函数中添加它
简单地说,尝试在函数render中添加'path'参数:

res.status(404).render('404', { pageTitle: 'Page Not Found' });

变成这样

res.status(404).render('404', { pageTitle: 'Page Not Found', path: 'Error'});

那应该可以了!

2ekbmq32

2ekbmq322#

Ahmed Mokhtar提供的解决方案是正确的。我想描述一下。实际上对于404 ejs文件,当它要导航到ejs时,它正在查找“path”。但是由于您没有为您的404 ejs提供任何对象属性path,因此会抛出未定义错误,因为path对于404 ejs导航ejs未知

kh212irz

kh212irz3#

你正在使用'路径'属性在这导航文件,但你不发送路径当你是渲染..
我从udemy的一门课程中认出了代码,我正在这样做,并且遇到了同样的问题

9njqaruj

9njqaruj4#

我在做这个udemy课程的时候也犯了同样的错误。为了避免这种情况,你必须改变

app.use((req, res, next) => {
res.status(404).render('404', { pageTitle: 'Page Not Found' });
});

exports.get404 = (req, res, next) => {
res.status(404).render('404', { pageTitle: 'Page Not Found', path: 
'/404' });};

简而言之,你必须设置路径:'/404'。

elcex8rz

elcex8rz5#

ejs使用相对路径,所以包括布局文件夹作为路径的一部分,即
<%- include('layouts/includes/navigation. ejs')%>

nukf8bse

nukf8bse6#

const p = require('path').dirname(Object.keys(require.cache)[0]) +
'/data/products.json';

models/product.js中检查您的路径,或者粘贴上面写的代码。
希望这能起作用

相关问题