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

为什么我的HTTP DELETE请求的body内容在Express后端显示为undefined?

解决方案

1. 补全body-parser配置

你仅引入了body-parser依赖,没有挂载对应的解析中间件到Express实例,无法解析JSON格式的请求体,添加如下配置(必须放在所有路由定义之前):

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
// 新增以下两行
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

如果已经添加了上述配置,继续往下排查。

2. 修正AngularJS请求配置

你当前的请求存在两处问题:

  • URL路径格式错误:路由定义为/movie/:title,需要将电影名直接拼接在URL路径中,而非放到查询参数
  • DELETE请求默认不会自动序列化请求体为JSON,需要手动指定请求头和序列化规则

修正后的前端代码如下:

$scope.del_movie = function(movie) {
    $http( {
        method: 'DELETE',
        // 直接将电影名拼入URL路径,编码防止特殊字符出错
        url: '/movie/' + encodeURIComponent(movie.title),
        data: {'username': movie.username},
        // 强制指定JSON格式请求头
        headers: {'Content-Type': 'application/json'},
        // 手动序列化请求体
        transformRequest: function(data) {
            return JSON.stringify(data);
        }
    }).then(function successCallback(response) {
        console.log(response);
        return getData();
    }, function errorCallback(response) {
        console.log('Error: ' + response);
    });
};

3. 修正逻辑校验Bug

你当前的用户身份比对逻辑存在错误:JSON.stringify会给邮箱字符串包裹双引号,和req.body.username的纯字符串永远无法匹配,直接去掉JSON.stringify即可:

// 修正前
oidcEmailString = JSON.stringify(req.oidc.user.email);
// 修正后
oidcEmailString = req.oidc.user.email;

4. 可选优化:避免DELETE请求体兼容问题

部分HTTP代理、服务器对DELETE请求携带请求体的支持不规范,更稳妥的实现是将用户名放到自定义请求头中,后端直接从请求头取值:
前端请求新增headers配置:

headers: {
  'Content-Type': 'application/json',
  'X-Username': movie.username
}

后端取值改为:

paramsUsernameString = req.get('X-Username');

额外安全建议

你当前删除操作的查询条件直接用了req.query,存在注入风险,建议手动指定查询条件:

// 修正前
Movie.findOneAndRemove(req.query, function(err, result)
// 修正后
Movie.findOneAndRemove({
  title: req.params.title,
  username: paramsUsernameString
}, function(err, result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:27:01