Node.js Express应用/zamowienia与/wysylka页面404错误求助
Node.js Express应用中/zamowienia和/wysylka页面返回404错误排查
开发个人网站的简易Node.js应用,已完成app.js、控制器及路由配置。主页与/sprzet子页面可正常访问,但/zamowienia和/wysylka两个子页面持续返回404错误。从结构上看,这两个页面的构建方式与/sprzet基本一致,追踪app-路由-控制器的调用流程未发现异常。
控制台输出
GET / 304 1.443 ms - - GET /css/style.css 304 0.325 ms - - GET /images/IMG_2202.png 304 0.639 ms - - GET /images/vertabelo-tabele.png 304 0.774 ms - - GET /sprzet 200 1.904 ms - 3241 GET /css/style.css 304 0.393 ms - - GET /images/IMG_2202.png 304 0.501 ms - - GET /zamowienia 404 1.152 ms - 1393 GET /wysylka 404 0.917 ms - 1393
相关代码片段
app.js
var createError = require('http-errors'); var express = require('express'); var path = require('path'); var cookieParser = require('cookie-parser'); var logger = require('morgan'); var indexRouter = require('./routes/index'); const sprzetRouter = require('./routes/sprzetRoute'); const wysylkaRouter = require('./routes/wysylkaRoute'); const zamowieniaRouter = require('./routes/zamowieniaRoute'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.use(logger('dev')); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', indexRouter); app.use('/sprzet', sprzetRouter); app.use('/list-wys', wysylkaRouter); app.use('/list', zamowieniaRouter); // catch 404 and forward to error handler app.use(function (req, res, next) { next(createError(404)); }); // error handler app.use(function (err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); }); module.exports = app;
wysylkaRoute.js
const express = require('express'); const router = express.Router(); const wysylkaController = require('../controllers/wysylkaController'); router.get('/', wysylkaController.showWysylkaList); router.get('/add', wysylkaController.showAddWysylkaForm); router.get('/details/:wysId', wysylkaController.showWysylkaDetails); module.exports = router;
wysylkaController.js
const { Router } = require("express"); exports.showWysylkaList = (req, res, next) => { res.render('pages/wysylka/list-wys', { navLocation: 'wys' }); } exports.showAddWysylkaForm = (req, res, next) => { res.render('pages/wysylka/form-wys', { navLocation: 'wys' }); } exports.showWysylkaDetails = (req, res, next) => { res.render('pages/wysylka/list-wys-details', { navLocation: 'wys' }); }
导航代码(EJS)
<nav> <ul> <li><a href="/" class="<%= navLocation == 'main' ? 'active' : ''%>">Strona główna</a></li> <li><a href="/zamowienia" class="<%= navLocation == 'zam' ? 'active' : ''%>">Zamówienia</a></li> <li><a href="/sprzet" class="<%= navLocation == 'sprz' ? 'active' : ''%>">Sprzęt</a></li> <li><a href="/wysylka" class="<%= navLocation == 'wys' ? 'active' : ''%>">Wysylka</a></li> </ul> </nav>
问题原因及解决方案
问题出在路由挂载路径与导航链接不匹配:
- 导航中访问的是
/wysylka,但app.js里将wysylkaRouter挂载到了/list-wys路径 - 导航中访问的是
/zamowienia,但app.js里将zamowieniaRouter挂载到了/list路径
修改app.js中的路由挂载代码,将路径改为与导航一致:
// 替换原有的对应行 app.use('/wysylka', wysylkaRouter); app.use('/zamowienia', zamowieniaRouter);
同时需要确认zamowieniaRoute.js的结构是否与sprzetRoute.js、wysylkaRoute.js一致,即是否包含处理根路径GET '/'的路由,确保控制器能正确渲染页面。
内容的提问来源于stack exchange,提问作者LinLee
相关产品推荐
相关产品推荐

