如何将每个月/日/年字段转换为猫鼬中的日期

时间:2019-06-20 22:09:44

标签: node.js date mongoose mongoose-populate

在我的应用程序中,用户使用各个月,日和年字段输入生日。我想将其作为单个Date存储在数据库中。我觉得这比我做起来要容易得多,但是我已经钻了几个兔子洞。

我尝试过或考虑过的问题:

虚拟机

不是一个真正的选择,因为它们实际上并不带有参数。我必须将这些字段合并到一个setDate属性中,此时,无论在哪里进行合并,我都可能将它们转换为Date()

预保存挂钩

我的dobDaydobMonthdobYear字段在this上不可访问,因为它们与文档中的字段不对应。

实例方法

UserSchema.methods.formatDob = function (day, month, year) {
  let dob = new Date( parseInt(year), parseInt(month) - 1, parseInt(day), 0, 0, 0, 0 );
  return new Date(dob, '<YYYY-MM-DD>');
}

从概念上讲,这将适用于我的“编辑”路线,但不适用于“创建”路线。

exports.register = async function(req, res, next) {  
  try {
    // instance methods not available yet
    let user = db.User.create(req.body);
    // method now available but too late to modify before inserting

在这种情况下,如果要调用实例方法并生成格式化的生日,则必须调用user.save(),这是不必要的数据库访问。

手动更新用户

const { dobYear, dobMonth, dobDay } = req.body;
const dob = formatDob(dobDay, dobMonth, dobYear);
user = new db.User(); // can't pass in req.body here
// Now I have to manually set all the fields!
...
user.dob = dob;
user.save();

因为我无法像使用req.body一样将db.User()传递到新的db.User.create()中,所以必须手动添加字段。一定有更好的方法。其他人如何做到这一点?

0 个答案:

没有答案