我想创建一个猫鼬计划,该计划有几层深,但出现错误:
代码如下:
//Mongoose Model
const MissionSchema = new Schema({
name: {
type: String,
},
objective: [
{
resources: [
{
x: { type: Number },
y: { type: Number }
}
]
}
]
});
// @POST api/mission
// @desc Create A Mission
router.post('/', (req, res) => {
const newMission = new MissionModel({
name: req.body.name,
x: req.body.objective.resources.x
});
newMission.save().then(mission => res.json(mission));
});
使用Postman测试时,控制台中始终出现错误消息
TypeError :无法读取
resources
的属性undefined
?
答案 0 :(得分:0)
无论何时,您都会收到此错误:
TypeError:无法读取
*propertyName*
的属性undefined
这意味着您正在调用错误的对象,或者尝试读取不存在的内容。
在您的情况下,这意味着在此部分代码中:
x: req.body.objective.resources.x
您的req.body.objective
是undefined
。您引用错误的对象,或者仅返回了undefined
。
解决方案:您可以做一些事情。但是首先,您应该在该行上使用console.log(req.body.objective)
并查看其记录。
答案 1 :(得分:0)
您将得到:
TypeError :无法读取
resources
的属性undefined
因为在您的 request body
中, objective
不可用,或者 objective
属性不可用 undefined
因此,您需要使用一些逻辑来维持执行流程,这里我使用的是 ternary operator :
所以您的代码将是:
router.post('/', (req, res) => {
const newMission = new MissionModel({
name: req.body.name,
x: req.body.objective?(req.body.objective.resources?req.body.objective.resources:'Missing Data is resource'):'Missing data is objective';
});
newMission.save().then(mission => res.json(mission));
});