
express 应用中子页面返回 404,通常是因为 `app.use()` 注册的路由前缀与实际访问路径不匹配;本文通过对比日志与路由配置,定位并修复 `/wysylka` 和 `/zamowienia` 页面无法访问的根本原因。
在 Express 中,app.use(path, router) 的第一个参数定义的是该路由器所处理请求的公共路径前缀(即 mount point)。用户在浏览器中访问 /wysylka,就必须确保有对应 app.use('/wysylka', wysylkaRouter) 的注册;否则,即使路由文件内部定义了 router.get('/', ...),Express 也无法将请求分发到该路由器。
从你的日志可清晰看出问题所在:
GET /sprzet 200 → 成功(因 app.use('/sprzet', ...) 存在)
GET /zamowienia 404 → 失败(但 nav 中 href="/zamowienia")
GET /wysylka 404 → 失败(同理)而你的 app.js 原始配置为:
app.use('/list-wys', wysylkaRouter); // ❌ 访问 /list-wys 才能命中
app.use('/list', zamowieniaRouter); // ❌ 访问 /list 才能命中这导致:
- 用户点击 → Express 查找 app.use('/wysylka', ...) → 未找到 → 进入 404 中间件
- 实际上,wysylkaRoute.js 内部的 router.get('/') 是相对于挂载路径的——它响应的是 /list-wys/,而非 /wysylka/
✅ 正确做法是:让 app.use() 的路径与导航链接(href)完全一致。修改后如下:
app.use('/', indexRouter); // 对应 /
app.use('/sprzet', sprzetRouter); // 对应 /sprzet
app.use('/wysylka', wysylkaRouter); // ✅ 对应 /wysylka
app.use('/zamowienia', zamowieniaRouter); // ✅ 对应 /zamowienia同时,请确认对应路由文件已正确导入(你已做到):
const wysylkaRouter = require('./routes/wysylkaRoute');
const zamowieniaRouter = require('./routes/zamowieniaRoute');⚠️ 注意事项:
- 路由挂载路径(app.use 第一个参数)必须与前端 的路径严格一致;
- router.get('/') 中的 '/' 是相对路径,表示“挂载点下的根”,例如 app.use('/wysylka', router) + router.get('/') = 响应 GET /wysylka;
- 修改后务必重启 Node.js 服务(Express 不支持热重载路由配置);
- 可添加调试中间件快速验证路由是否生效:
app.use('/wysylka', (req, res, next) => { console.log('[DEBUG] /wysylka route hit'); next(); }, wysylkaRouter);
修复后,访问 /wysylka 将成功触发 wysylkaController.showWysylkaList,渲染 pages/wysylka/list-wys.ejs,且导航栏 navLocation == 'wys' 判断也将正确激活对应菜单项。这是 Express 路由机制的基础原则——路径挂载即契约,前后端必须对齐。











