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

Express使用express.Router拆分多路由时Mongoose相关POST请求报错排查

问题排查与修复方案

核心报错原因

你当前收到cannot POST /addpo的直接原因是表单提交路径与后端路由路径不匹配:
你将purchaseOrders路由模块挂载到了/purchaseOrders前缀下,因此路由文件内定义的/addpo POST接口完整路径为/purchaseOrders/addpo,但你EJS表单的action属性填写的是/addpo,提交时会直接请求根路径下的/addpo,自然匹配不到路由。

其他隐藏语法错误汇总

除了路径问题外,你的代码中还有多处语法错误,即使修复路径后也会导致服务无法正常运行:

  • server.js文件错误:
    • 变量名大小写错误:引入的依赖是bodyParser,调用时写为bodyparser,会触发未定义变量报错
    • 变量声明语法错误:constpurchaseOrders缺少空格,应为const purchaseOrders
  • purchaseOrders.js文件错误:
    • 依赖引入大小写错误:require("Mongoose")应为小写的require("mongoose"),npm包名严格区分大小写
    • 引入路径语法错误:require("../routes/schemas.js:);引号未闭合且多了冒号,应为require("../routes/schemas.js");
    • 路由定义语法错误:router.post("/addpo, function(req.res){路径字符串未闭合引号,回调参数的分隔符错写为点,应为router.post("/addpo", function(req, res){
    • 模型调用大小写不匹配:你引入的模型是大写的Po,调用save时用了小写的po,需要确保和你实例化模型的变量名一致
    • 缺少模型实例化步骤:调用po.save()前需要先通过const po = new Po(提交参数)实例化模型,直接调用会报错

修复方案

  1. 修改EJS表单的提交路径:
<form action="/purchaseOrders/addpo" method="post">
  1. 替换修复后的server.js代码:
// dependencies
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
app.use(bodyParser.urlencoded({extended: true}));
app.set('view engine', 'ejs');

// routes
const purchaseOrders = require("./routes/purchaseOrders");
app.use("/purchaseOrders", purchaseOrders);

// listen
app.listen(3000, function(){
  console.log("Server started on port 3000");
});
  1. 替换修复后的purchaseOrders.js代码:
// dependencies
const express = require("express");
let router = express.Router();
const mongoose = require("mongoose");
const connection = require("../routes/mongoose.js");
const Po = require("../routes/schemas.js");

// post route
router.post("/addpo", function(req, res){
  // 实例化模型后再执行保存
  const po = new Po(req.body);
  po.save()
    .then(() => res.redirect("/"))
    .catch(err => console.log("保存失败:", err));
});

module.exports = router;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:18:02