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

Express.js中Axios发起DELETE请求传参的Heroku部署问题

解决Express DELETE接口在Heroku上无法获取req.body.password的问题

我一眼就看出问题出在Axios的DELETE请求调用方式上,给你理清楚来龙去脉和解决方案:

核心原因

Axios的delete方法和post/put的参数逻辑不一样——它的第二个参数是配置对象,而非直接传递请求体数据。你现在写的axios.delete('url/id', ({password: 'password'}))会把这个对象当成请求配置项,而非请求体内容,所以后端自然拿不到req.body.password。

至于本地Postman能正常运行,是因为Postman会自动把你输入的数据放到DELETE请求的body里,但Axios的调用逻辑错了,到Heroku上就暴露了(其实本地用Axios调用应该也有问题,只是你之前用Postman测本地没注意到这个差异)。

具体解决方案

1. 修正Axios的DELETE调用方式

把请求体数据放到配置对象的data属性里,这才是Axios DELETE请求传递body的正确姿势:

axios.delete('url/id', {
  data: {
    password: 'password'
  }
})
.then(response => {
  // 处理成功响应
})
.catch(error => {
  // 处理错误
})

2. 确认Express的请求体解析中间件

虽然本地正常,但还是要确保你的Express应用已经正确配置了解析JSON请求体的中间件(这是基础配置,Heroku上部署的代码必须包含):

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

// 解析JSON格式的请求体
app.use(express.json());
// 如果有需要,也可以解析urlencoded格式的请求体
app.use(express.urlencoded({ extended: true }));

3. 加日志辅助排查(可选)

你可以在后端接口里加一行日志,方便确认请求体是否正确传递:

app.delete('/your-path/:id', (req, res) => {
  console.log('Received req.body:', req.body); // 打印请求体内容
  if (!req.body.password) {
    return res.status(400).json({ message: "input password" });
  }
  // 后续业务逻辑
});

部署到Heroku后,通过heroku logs --tail命令查看实时日志,就能清楚看到请求体是否正常接收。

这样修改后,你的接口应该就能在Heroku上正常获取到req.body.password了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:49:12