首页 > 解决方案 > 将 req.body 中的空字符串 ''" 替换为 null/undefined

问题描述

当 req.body 包含值为“”的键时,我想将空字符串更改为未定义或 null。

我已经在谷歌上搜索了很长时间,我可能是从错误的方式来研究它,因为我是一个完全的业余爱好者,但我只能找到如何验证输入是否为空字符串。问题是我不希望在我的数据库中保存空字符串,但这些字段不是必需的,因此验证在这里没有帮助。

我知道解决这个问题的一种方法是通过 req.body JSON 并在保存之前更改值,但这听起来不是最好的方法。

是否可以使用猫鼬来做到这一点?

const car = new CarSchema()
Object.assign(car, req.body) //same time replace '' -> undefined
car.save()

标签: node.jsmongodbmongoose

解决方案


从现有文档中删除或转换这些属性的最佳方法,将它们设置为 undefined 以在文档中删除此键,或者如果值""在保存文档之前设置为 null:

user.first_name = user.first_name ? user.first_name : undefined;
user.signup_date = user.signup_date ? user.signup_date : undefined;
user.save();

或者:

user.first_name = user.first_name ? user.first_name : null;
user.signup_date = user.signup_date ? user.signup_date : null;
user.save();

顺便说一句,您指的是Mongoose 文档(Schema Types),您可以转到 Arrays 说明。在那里,它说:

要覆盖此默认值,您需要将default值设置为 undefinednull。当然,当我们创建和量化我们自己的模式时

var car = new Schema({
     toys: {
          type: [{
              name: String,
              features: [String]
          }],
          default: undefined //or null
     }
})

之后就不可能了,或者你必须在里面编写 Mongo 代码。没关系,两者都是对象处理,无论是在 Mongo 中还是在 JavaScript 中。Mongo 为您提供了您已保存的内容,并且需要以与 JavaScript 相同的方式进行处理。


推荐阅读