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

Express+Mongoose出现Cannot POST /错误,POST请求失败求助

排查Express POST请求报错"Cannot POST /"的问题

让我帮你一步步梳理问题,从你提供的代码和描述来看,主要有几个关键问题需要修正:

1. 请求路径与路由不匹配

你的Express路由定义的是/cards路径的POST请求,但报错显示Cannot POST /,这说明你在REST Console测试时,请求的是根路径/,而非正确的/cards路径。

解决方法:

  • 确认REST Console的请求URL是http://你的服务器地址/cards(比如http://localhost:3000/cards),不要只填写根路径。

2. 字段拼写错误导致数据无法正确赋值

仔细对比代码后发现一个致命的拼写问题:

  • 你POST的JSON数据里的字段是title,但Mongoose Schema里写的是tittle(多了一个t),同时路由代码里也是用card.tittle = req.body.tittle来赋值。

这会引发两个问题:

  • 请求中的title值无法被正确读取到card对象中,存入数据库的tittle字段会是undefined
  • 即使路径正确,也可能因为数据不完整出现隐性错误(虽然你的Schema没加必填验证,但这不符合业务逻辑)

解决方法:
把Schema和路由代码里的tittle统一改成title,和请求JSON的字段保持一致:

// 修正后的Mongoose Schema
var CardSchema = new Schema({
  _id : String,
  title : String, // 把tittle改成title
  listId : String,
  boardId : String,
  archived :Boolean,
  userId : String
});
// 修正后的路由代码
router.route('/cards')
.post(function(req, res) {
  var card = new Card();
  card._id = req.body._id;
  card.title = req.body.title; // 把tittle改成title
  card.listId = req.body.listId;
  card.boardId = req.body.boardId;
  card.archived = req.body.archived;
  card.userId = req.body.userId;
  card.save(function(err) {
    if (err) res.send(err);
    res.json({ message: 'Card created!'})
  });
});

3. 缺少JSON请求体解析中间件

Express默认不会自动解析JSON格式的请求体,如果你的Express应用没有配置相关中间件,req.body会是undefined,导致无法获取POST的JSON数据。

解决方法:
在你的Express主文件(比如app.js或server.js)中添加JSON解析中间件:

const express = require('express');
const app = express();

// 解析JSON格式的请求体
app.use(express.json());

// 挂载你的路由(假设你的路由文件是./routes/cards)
const cardRouter = require('./routes/cards');
app.use('/', cardRouter);

验证步骤

  1. 修正上述所有拼写错误
  2. 确保Express应用添加了express.json()中间件
  3. 在REST Console中设置请求URL为/cards,请求方法为POST,请求体为你提供的JSON数据
  4. 重新发送请求,应该就能成功创建Card了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:54:16