我从用户处以字符串格式获取日期,并且当前在创建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中间件的一部分,允许在保存数据之前执行回调函数的定义。可能是这样的事情完成了预期的工作:
req.body.starttime
pre()
var RunSchema = new Schema({ [...] starttime: { type: Date, default: Date.now } }); RunSchema.pre('save', function(next) { this.starttime = new Date(); next(); });
请注意,save每次创建或更新记录之前都会调用该事件的回调函数。因此,这就是例如显式设置“修改的”时间戳的方法。
save
编辑:
感谢您的评论,我现在对您要实现的目标有了更好的了解。如果要在分配数据并将其持久化到记录之前修改数据,则可以轻松利用setSchema 的属性:
set
// defining set within the schema var RunSchema = new Schema({ [...] starttime: { type: Date, default: Date.now, set: util.getDate } });
假设对象util在范围内(必需或其他),您当前的实现适合该属性的签名set:
util
function set(val, schemaType)
可选参数schemaType允许您检查转换过程是否以任何方式依赖架构字段定义的属性。
schemaType