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

Express+Mongoose项目POST创建数据库条目报500错误如何修复?

错误原因&修复方案

1. 直接导致ReferenceError: body is not defined的拼写错误

你在控制器app.post路由调用createExercise方法时存在两处语法问题:

  • 错误写法:exercises.createExercise(req.body.name, req.body.reps, req.body.weight, req.body.unit, req.body.unit, req,body.date)
  • 具体问题:
    • 多传了一次req.body.unit参数,createExercise方法仅需要5个入参(name、reps、weight、unit、date),你实际传了6个参数
    • 最后一个参数把req.body.date的属性访问符.错写成了逗号,,变成了req,body.date,JS会把body识别为独立变量,因此抛出未定义错误
  • 修复后的post路由代码:
app.post('/exercises', (req, res) => {
    exercises.createExercise(req.body.name, req.body.reps, req.body.weight, req.body.unit, req.body.date)
        .then(exercise => {
            res.status(201).json(exercise);
        })
        .catch(error => {
            console.error(error);
            res.status(400).json({ Error: 'Request failed' });
        });
});

改完上述代码即可解决本次500报错,正常创建数据库条目。


其他潜在问题提前修复(避免后续测试其他接口报错)

2.1 模型层findExercises参数定义错误

你当前的写法没有声明filter、projection、limit三个入参,调用时会报变量未定义,修复:

const findExercises = async (filter, projection, limit) => {
    const query = Exercise.find(filter)
        .select(projection)
        .limit(limit)
    return query.exec();
}

2.2 模型层replaceExercise逻辑错误

  • 你当前把所有字段都放在replaceOne的过滤条件里,应该仅按_id过滤,第二个参数才是要替换的新数据
  • 返回值属性名写错,正确属性是modifiedCount不是nModifed
    修复:
const replaceExercise = async(_id, name, reps, weight, unit, date) =>{
    const result = await Exercise.replaceOne({_id: _id}, {name, reps, weight, unit, date});
    return result.modifiedCount;
}

2.3 删除方法名调用不统一

模型层导出的方法名是deletebyID,控制器里调用的是deleteById,大小写不一致,可修改模型层导出语句适配:

export {createExercise, findExercises, replaceExercise, deletebyID as deleteById };

2.4 控制器PUT路由返回值错误

put接口返回时错误从req.query取unit和date,应该从请求体req.body取值:

res.json({ _id: req.params._id, name: req.body.name, reps: req.body.reps, weight: req.body.weight, unit: req.body.unit, date: req.body.date })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:24:04