【问题标题】:I'm getting a reference error while using ejs in my nodejs project在我的 nodejs 项目中使用 ejs 时出现参考错误
【发布时间】: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)

【问题讨论】:

    标签: node.js ejs project


    【解决方案1】:

    因为navigation.ejs 使用变量path。但是当你包含你的 navigation.ejs 模块时,你不会交出这个变量。查看你的 user.js,在那里你还渲染了一个 .ejs 文件,并且你交出了 prodspageTitlepath 等变量。

    【讨论】:

    • 是的,我明白了……现在我的问题是……我要写什么以及在哪里……我理解你所说的逻辑,但我无法理解围绕我需要写的内容和位置。
    • 在你的navigation.ejs中改变这一行:include('includes/navigation.ejs', { path: 'THE_PATH_HERE' })
    【解决方案2】:

    ejs 引用错误!!

    app.get 路由定义

    重复检查!!

    非数据库连接直接路由一 和 db 连接路由一

    这是我的情况^^

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案3】:

    这里,主要问题在于path 变量。 navigation.ejs 文件需要 path 变量,但是对于您的 404 页面,您从未得到 path 变量。所以你必须为它放置一个path 变量。在您的错误控制文件或错误控制函数中放置一个路径变量。

    res.render("404", { path: "", pageTitle: "404 Not Found" });
    

    (我为路径定义了一个空值,它对我有用,我不知道这是否是最好的方法。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-16
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      相关资源
      最近更新 更多