【发布时间】:2022-07-07 10:17:11
【问题描述】:
我目前正在学习关于 node js 的课程,在上一个视频中,我应该将我的整个项目转换为 ejs,我几乎成功地做到了。虽然我了解模板引擎背后的逻辑以及路由系统是如何工作的(或者至少我喜欢这样认为),但我目前陷入了一个问题,即项目的所有页面都可以很好地呈现 404 错误之一,交易是我不确定错误在哪里。显然我不是一个 sintax 问题,因为代码写得很好,所以我假设这是一个逻辑错误,但我似乎找不到它可以在哪里。有趣的是,当我在 404.ejs 文件中删除 <%- include('includes/navigation.ejs') %> 时它工作正常,它不会呈现导航栏,但至少身体会。我想了解的是,这个特定项目的导航模板是如何与我的 404.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>
404.ejs:
<%- include('includes/head.ejs') %>
</head>
<body>
<%- include('includes/navigation.ejs') %>
<h1>Page Not Found!</h1>
<%- include('includes/end.ejs') %>
user.js:
const path = require('path');
const express = require('express');
const rootDir = require('../util/path');
const adminData = require('./admin');
const router = express.Router();
router.get('/', (req, res, next) => {
const products = adminData.products;
res.render('shop', {
prods: products,
pageTitle: 'Shop',
path:'/',
hasProducts: products.length > 0,
activeShop: true,
productsCSS: true
});
});
module.exports = router;
错误信息:
ReferenceError: C:\Users\TOMAS\Desktop\nodejs templatingEngines\views\404.ejs:4
2| </head>
3| <body>
>> 4| <%- include('includes/navigation.ejs') %>
5| <h1>Page Not Found!</h1>
6|
7| <%- include('includes/end.ejs') %>
C:\Users\TOMAS\Desktop\nodejs templatingEngines\views\includes\navigation.ejs:4
2| <nav class="main-header__nav">
3| <ul class="main-header__item-list">
>> 4| <li class="main-header__item"><a class="<%= path=== '/' ? 'active' : ''%>" href="/">Shop</a></li>
5| <li class="main-header__item"><a class="<%= path=== '/admin/add-product' ? 'active' : ''%>" href="/admin/add-product">Add Product</a></li>
6| </ul>
7| </nav>
path is not defined
at eval (eval at compile (C:\Users\TOMAS\Desktop\nodejs templatingEngines\node_modules\ejs\lib\ejs.js:662:12), <anonymous>:12:26)
at navigation (C:\Users\TOMAS\Desktop\nodejs templatingEngines\node_modules\ejs\lib\ejs.js:692:17)
at include (C:\Users\TOMAS\Desktop\nodejs templatingEngines\node_modules\ejs\lib\ejs.js:690:39)
at eval (eval at compile (C:\Users\TOMAS\Desktop\nodejs templatingEngines\node_modules\ejs\lib\ejs.js:662:12), <anonymous>:13:17)
at 404 (C:\Users\TOMAS\Desktop\nodejs templatingEngines\node_modules\ejs\lib\ejs.js:692:17)
at tryHandleCache (C:\Users\TOMAS\Desktop\nodejs templatingEngines\node_modules\ejs\lib\ejs.js:272:36)
at View.exports.renderFile [as engine] (C:\Users\TOMAS\Desktop\nodejs templatingEngines\node_modules\ejs\lib\ejs.js:489:10)
at View.render (C:\Users\TOMAS\Desktop\nodejs templatingEngines\node_modules\express\lib\view.js:135:8)
at tryRender (C:\Users\TOMAS\Desktop\nodejs templatingEngines\node_modules\express\lib\application.js:640:10)
at Function.render (C:\Users\TOMAS\Desktop\nodejs templatingEngines\node_modules\express\lib\application.js:592:3)
【问题讨论】: