Mongoose save 中默认值无效 - 字段未保存

3

我有一个架构,其中包含以下定义的字段:

range: {type: Number, default: 100000, min: 1},

在控制器中,我设置了范围并保存:
function postPlacard(req, res) {

    // Create a new instance of the Placard model
    var placard = new Placard();

    ...

    placard.range = req.body.range;

    ...

    placard.save(function(err) {
      if (err)
        res.send(err);

      res.json({ message: 'Placard added!', data: placard });
  });
}

如果我在表单中提交一个没有范围的POST,就会出现问题。在这种情况下,没有范围字段保存到文档中。这显然意味着范围小于其最小值1。

我希望在保存之前范围是未定义的,在保存期间应该应用默认值。

是什么导致范围在保存的文档中丢失,我该如何纠正?

谢谢

1个回答

5
你之所以遇到这个错误,是因为即使req.body.range字段缺失,你仍然将其赋值给placard.range。这会覆盖new Placard()设置的默认range值。
请通过添加条件,只有在字段存在时才进行赋值,例如:
```if(req.body.range) { placard.range = req.body.range; }```
if (req.body.range !== undefined) {
    placard.range = req.body.range;
}

3
你的建议有效,谢谢。从“为什么”的角度来看,我认为这是一个经典的“未定义”与“未赋值”的情况。通过将范围分配为未定义值,mongoose的默认操作不会被激活。如果范围是“未定义”,则默认操作会被激活。如果有选项来确定何时应用默认操作,那将非常有用,例如当变量未定义时应用默认操作。否则,我们实际上要进行两次验证:一次在代码中,一次在 mongoose 验证器中。我会进一步研究这个问题。 - user1760025

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接