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);
验证步骤
- 修正上述所有拼写错误
- 确保Express应用添加了
express.json()中间件 - 在REST Console中设置请求URL为
/cards,请求方法为POST,请求体为你提供的JSON数据 - 重新发送请求,应该就能成功创建Card了
内容的提问来源于stack exchange,提问作者fhernandez
相关产品推荐
相关产品推荐

