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
相关产品推荐
相关产品推荐

