Node.js 为什么';当没有输入任何内容时,`default`值在mongoose模式中不起作用吗?

Node.js 为什么';当没有输入任何内容时,`default`值在mongoose模式中不起作用吗?,node.js,mongodb,express,database,Node.js,Mongodb,Express,Database,这是我的模式,当我在提交“博客”帖子之前将HTML输入字段留空时,imagedefault值似乎不起作用 这是进入数据库的输入 { __v: 0, title: '', body: '', _id: 583af591c460fca539b8f787, created: 2016-11-27T15:02:41.613Z, image: '' } 我不明白问题出在哪里,因为图像没有任何值,也没有设置默认值。清除空字符串和任何您认为不需要的内容。在将对象传递给mongo之前,可以

这是我的模式,当我在提交“博客”帖子之前将HTML输入字段留空时,image
default
值似乎不起作用

这是进入数据库的输入

{ __v: 0,
  title: '',
  body: '',
  _id: 583af591c460fca539b8f787,
  created: 2016-11-27T15:02:41.613Z,
  image: '' }

我不明白问题出在哪里,因为
图像没有任何值,也没有设置默认值。

清除空字符串和任何您认为不需要的内容。在将对象传递给mongo之前,可以尝试此lodash函数


。.pickBy(updateObject,v=>v!==null&&v!==undefined&&v!==“”);//删除所有空、未定义和空字符串值

我通过添加一条if语句解决了这个问题,如下所示:

if(image === '') {
  image = undefined;
}

我也有类似的困难,我选择使用一个带有默认值的变量。当您尝试执行POST请求时,它将被包括在内

var image = req.body.image || "some default value";

假设用户没有输入任何内容,则在将数据发送到后端时,默认情况下其值为null

如果将HTML字段留空,浏览器仍会将空字符串发送到服务器。因为您随后在模型实例中定义数据(在本例中为空字符串),所以Mongoose不会使用默认值。@slugonamission所以它基本上是发送一个空字符串,而且从技术上讲它仍然是一个字符串,所以Mongoose不会使用默认值?您知道解决此问题的方法吗?您的应用程序逻辑可以为您实现“默认”行为(即,如果发布了
,请替换为
未定义的
,使Mongoose填写默认值,或手动填写默认值)。没有什么灵丹妙药能让猫鼬做到这一切you@slugonamission谢谢你的帮助。我真的很感激。我也有同样的问题,所以谢谢你。我最初还希望Mongoose将falsy空字符串视为非值。最好至少有一个设置来控制这个,defaultOnFalsy或者其他什么。。。
var image = req.body.image || "some default value";