Node.js路由失效,POST请求报错求助
解决Express中POST请求返回"Cannot POST /api/cheques"的问题
作为Node.js新手遇到这个问题很正常,我帮你一步步排查和解决:
1. 先修正MongoDB连接URL的致命错误
你代码里的mongoose连接用了http://协议,这完全错了!MongoDB的专属连接协议是mongodb://,错误的协议会导致数据库根本连不上,甚至间接影响路由的正常工作。修改成这样:
mongoose.connect('mongodb://localhost:27017/utils/chequeman') .then(() => console.log('MongoDB连接成功啦')) .catch(err => console.error('MongoDB连接失败:', err));
加上成功和失败的回调,能帮你快速确认数据库是否正常连接。
2. 完善路由的错误处理逻辑
你当前的save回调里,错误处理后没有终止后续代码执行,会导致不管有没有错误都会发送两次响应,引发"Cannot set headers after they are sent"的隐性错误,修正如下:
cheque.save(function (err) { if (err) { return res.status(500).send(err); // 用return终止后续代码执行 } res.json({ message: 'Cheque details added' }); });
3. 验证Postman的请求设置是否正确
很多时候这个错误是因为请求本身不符合要求:
- 确认请求方法是POST,URL是
http://localhost:9090/api/cheques(如果你的端口是9090的话) - 在Body选项卡选择raw,格式选JSON,然后输入类似这样的请求体:
{ "chequeReceiptDate": "2024-05-20" } - 确保请求头里包含
Content-Type: application/json,否则bodyParser.json()无法正确解析你的请求体。
4. 检查Cheque模型的定义
确保./models/cheque.js里正确定义了chequeReceiptDate字段,比如:
const mongoose = require('mongoose'); const ChequeSchema = new mongoose.Schema({ chequeReceiptDate: { type: Date, required: true } }); module.exports = mongoose.model('Cheque', ChequeSchema);
如果字段没定义或者类型不匹配,保存数据时会出错,也可能导致响应异常。
5. 测试路由是否正常挂载
可以先给/cheques路由加一个GET请求测试:
router.route('/cheques').get(function(req, res) { res.json({ message: 'Cheques路由正常工作!' }); });
用Postman发GET请求到/api/cheques,如果能收到响应,说明路由挂载没问题,问题就出在POST请求的处理或者数据库操作上。
按照这些步骤排查,应该能解决你的问题啦!
内容的提问来源于stack exchange,提问作者JiKa
相关产品推荐
相关产品推荐

