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

Express+Mongoose开发REST API时PUT请求报错无法读取undefined的title属性

问题根因

报错TypeError: Cannot read properties of undefined (reading 'title')由两处代码问题直接导致:

  • 你虽然引入了body-parser依赖,但没有注册对应的请求体解析中间件,所有PUT/POST请求携带的参数不会被解析挂载到req.body上,req.body实际值为undefined,读取title属性直接触发类型错误,对应报错指向的app.js第83行就是你写{ title: req.body.title, content: req.body.content }的位置。
  • PUT接口里Article.updateOne的回调函数参数命名为res,和路由层的Express响应对象res重名,形成变量遮蔽,就算修好请求体解析的问题,这里执行res.send()时也会因为调用的不是Express响应对象而二次报错。
  • 额外注意:Postman发请求时要选对请求体格式,要么选x-www-form-urlencoded传参,要么选raw-JSON传参,要和服务端配置的解析规则匹配。
修复方法
  1. 在路由定义前补全请求体解析中间件配置,放在app.use(express.static("public"));这行下面即可:
// 解析x-www-form-urlencoded格式请求体
app.use(bodyParser.urlencoded({ extended: true }));
// 解析JSON格式请求体
app.use(express.json());
  1. 修改PUT接口的数据库操作逻辑,修正回调参数命名冲突,全量更新场景直接用replaceOne语义更准确,不需要额外传overwrite参数:
.put(function (req, res) {
    Article.replaceOne(
        { title: req.params.articleTitle },
        { title: req.body.title, content: req.body.content },
        function (err, result) {
            if (!err) {
                res.send("successfully updated article!");
            } else {
                res.send(err);
            }
        }
    );
});
  1. 保存代码重启服务,再用Postman发PUT请求即可正常更新数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:15:52