TypeError:无法读取未定义的属性“资源”?

时间:2018-07-12 01:15:19

标签: javascript node.js mongoose typeerror mongoose-schema

我想创建一个猫鼬计划,该计划有几层深,但出现错误:

代码如下:

//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

  • 任务名称
      任务目标
        任务资源
        • 任务资源#

2 个答案:

答案 0 :(得分:0)

无论何时,您都会收到此错误:

  

TypeError:无法读取*propertyName*的属性undefined

这意味着您正在调用错误的对象,或者尝试读取不存在的内容

在您的情况下,这意味着在此部分代码中:

x: req.body.objective.resources.x

您的req.body.objectiveundefined。您引用错误的对象,或者仅返回了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));
});