当前位置: 首页 > 面试题库 >

在保存到Mongoose(ExpressJS)中之前如何在Model中格式化数据

上官飞
2023-03-14
问题内容

我从用户处以字符串格式获取日期,并且当前在创建Schema对象和保存之前在控制器中将其转换为Date。有没有一种方法可以将这种逻辑转换为模型,因为在我看来,模型是正确的选择

var RunSchema = new Schema({
    created: {
        type: Date,
        default: Date.now
    },
    starttime: {
        type: Date,
        default: Date.now
    }

});

目前,我正在这样做

//req.body = {starttime;'2.05.2013 11:23:22'}
var run = new Run(req.body);
// util.getDate(datetime) returns false if invalid and Date() if valid
// req.body.starttime = '2.05.2013 11:23:22';
run.starttime = util.getDate(req.body.starttime);
run.save(function(err) {
    if(err) {
    } else {
    }
});

在旁注中,如何断言是否要在自定义函数检查中处理参数。就像是

    req.assert('name', 'Name can\'t be empty').len(1, 1000);

问题答案:

虽然我不确定的含义req.body.starttime,但是我很确定您正在寻找Schema对象pre()函数,该函数是Mongoose中间件的一部分,允许在保存数据之前执行回调函数的定义。可能是这样的事情完成了预期的工作:

var RunSchema = new Schema({
  [...]
  starttime: {
    type: Date,
    default: Date.now
  }
});

RunSchema.pre('save', function(next) {
  this.starttime = new Date();
  next();
});

请注意,save每次创建或更新记录之前都会调用该事件的回调函数。因此,这就是例如显式设置“修改的”时间戳的方法。

编辑:

感谢您的评论,我现在对您要实现的目标有了更好的了解。如果要在分配数据并将其持久化到记录之前修改数据,则可以轻松利用setSchema 的属性:

// defining set within the schema
var RunSchema = new Schema({
  [...]
  starttime: {
    type: Date,
    default: Date.now,
    set: util.getDate
  }
});

假设对象util在范围内(必需或其他),您当前的实现适合该属性的签名set

function set(val, schemaType)

可选参数schemaType允许您检查转换过程是否以任何方式依赖架构字段定义的属性。



 类似资料:
  • 我有多个文本框,当用户在不同的文本框中键入时,我希望有一个存储所有格式化数据的数组。 格式化的数据以 m:ss 为单位(m - 分钟,s - 秒) 现在,所有不同的文本框都显示相同的值,因为只有一个this.formatTime. 我们如何改变这一点,以便v-model遍历数组,并将其添加到格式化值数组中? 文本框应显示格式化的值,并将其存储在所有格式值[]中。 我真的被困在这个,谢谢你的时间!

  • 我对node js和expressjs框架很陌生。我正在开发一个web应用程序,我被卡住了。我已经设置了所有的数据库要求,所有的工作都很好,现在我想把一些数据保存到数据库中,我把数据存储在一个变量中,但不幸的是,存储在变量(MyID)中的数据没有保存。这是我的密码 var=MyID app.post(“/AddContact”,function(req,res){ }

  • 我有这样的代码: 当我这样做邮递员的时候: 我得到以下错误: d:\stijn\documenten\eva-project-groep-6\api\node_modules\mongoose\lib\schema\obj ectid.js:134抛出新的CastError('objectid',value,this.path);^Error at mongooseerror.casterror(

  • 问题内容: 我有以下由时间戳记中的模型值填充的文本输入: 它将输入值显示为给定的时间戳。 我想将输入中可见的值转换为格式化日期(YYYY / MM / DD),但在模型中应始终将其作为时间戳记。 我试图通过这种方式做到这一点: 但是没有运气。 感谢您的任何建议。 问题答案: 您可以尝试过滤器 的HTML 控制器JS

  • 我使用下面的openssl命令将公钥存储到。pem文件。 但是当我尝试使用此命令时,它将整个证书信息存储在mypubkey.pem文件中。 我已经看到我可以保存我的公钥使用 但这是一个错误。我不能使用“

  • 这是我的图式 姓名:String,电话:String,地址:String mongoose.model("user", userSchema); var user=mongoose.model("user"); var newUser=new user({name:"d", phone:"p",地址:"q"}); newUser.save(); 新用户。findOne({u id:“dsklfj9