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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:48:32