naj*_*spy 3 model-view-controller node.js express
该应用程序适用于商店和管理路线,但不适用于错误路线。错误路线也是 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);
Run Code Online (Sandbox Code Playgroud)
404 EJS代码是
<%- include('includes/head.ejs') %>
</head>
<body>
<%- include('includes/navigation.ejs') %>
<h1>Page Not Found!</h1>
<%- include('includes/end.ejs') %>
Run Code Online (Sandbox Code Playgroud)
并且,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>
Run Code Online (Sandbox Code Playgroud)
它显示以下错误:
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)
Run Code Online (Sandbox Code Playgroud)
我在网上尝试了各种方法,但找不到调整代码的方法。
小智 8
原因是路径未定义,因此在 navigation.ejs 中找不到路径的值,因此要解决此问题,您应该将其添加到渲染函数中
很快,尝试在此处的函数渲染中添加“path”参数:
res.status(404).render('404', { pageTitle: 'Page Not Found' });
Run Code Online (Sandbox Code Playgroud)
变成这样
res.status(404).render('404', { pageTitle: 'Page Not Found', path: 'Error'});
Run Code Online (Sandbox Code Playgroud)
那应该可以成功!