You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js+Express使用MVC模式配置路由时出现Cannot Post /storeBook错误求解

问题核心原因

你在入口文件中把adminRouter挂载到了/admin前缀下,所以routes/admin.js里定义的router.post('/storeBook')实际生效路径是/admin/storeBook,但前端表单提交的目标路径是/storeBook,路径不匹配自然会抛出Cannot Post /storeBook错误。


解决步骤

1. 修正前端表单提交路径

把表单的action属性修改为匹配的路由路径:

<form class="form-signin" method="POST" action="/admin/storeBook" enctype="multipart/form-data">

2. 快速校验路由匹配的小技巧

可以在入口文件所有路由注册前加临时调试中间件,打印所有请求的方法和路径,方便排查路由不匹配问题:

app.use((req, res, next) => {
  console.log(`${req.method} ${req.path}`)
  next()
})

3. 补充检查避免后续报错

  • 确认已注册处理表单的中间件,入口文件要提前配置:
// 处理普通表单字段
app.use(express.urlencoded({ extended: true }))
// 你用到了req.files,要先安装express-fileupload再注册
const fileUpload = require('express-fileupload')
app.use(fileUpload())
// 注册静态资源目录,否则上传的文件无法访问
app.use(express.static('public'))
  • 修正控制器中的路径不匹配问题:你当前把文件存在public/uploads目录,但是数据库存的路径是/books/${file.name},后续访问文件会404,建议统一改成/uploads/${file.name}。
  • 修正控制器重定向路径:如果/displayBook路由也放在adminRouter下,要把重定向地址改成/admin/displayBook。

内容的提问来源于stack exchange,提问作者Frederick Ottache

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:09:03