报错Route.delete()需回调函数却获[object Undefined],求排查删除函数问题
解决 "Route.delete() requires a callback function but got a [object Undefined]" 错误
这个错误的根源非常直观——你的路由配置引用了一个不存在的控制器方法!
先对比你的两段代码:
- 在
playerController对象里,你定义的删除逻辑方法名叫delete - 但在路由配置中,你写的是
app.delete('/players/:id', playerController.destroy);
playerController.destroy这个方法根本没定义,所以Express拿到的是undefined,自然就抛出了这个回调函数缺失的错误。
修复方案(二选一即可)
方案1:同步路由与控制器的方法名
把路由行改成和控制器里的方法名一致:
app.delete('/players/:id', playerController.delete);
方案2:同步控制器与路由的方法名
把控制器里的方法名改成路由里引用的destroy:
const playerController = { index: (request, response) => { Player.find({}) .then(player => response.json(player)) .catch(error => console.log(error)); }, create: (request, response) => { Player.create(request.body) .then(player => response.json(player)) .catch(error => console.log(error)); }, // 把delete改成destroy destroy: (request, response) => { Player.remove(request.params.id) .then(player => response.json(player)) .catch(error => console.log(error)); } };
额外优化提示
另外要注意,Mongoose的Player.remove()方法已经被废弃,推荐使用更明确的findByIdAndDelete或deleteOne方法,同时还能补充错误处理逻辑,让接口更健壮:
destroy: (request, response) => { Player.findByIdAndDelete(request.params.id) .then(deletedPlayer => { // 处理玩家不存在的情况 if (!deletedPlayer) { return response.status(404).json({ message: "指定玩家不存在" }); } response.json(deletedPlayer); }) .catch(error => { console.log(error); // 给前端返回错误状态码和信息 response.status(500).json({ error: "删除玩家失败" }); }); }
内容的提问来源于stack exchange,提问作者cpru
相关产品推荐
相关产品推荐

