我以字符串格式从用户获取日期,并且我在创建Schema对象并保存之前当前转换为控制器中的Date。有没有办法将这个逻辑转移到模型,因为在我看来,Model是这个
的正确位置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);
答案 0 :(得分:7)
虽然我不确定req.body.starttime
的含义,但我很确定您正在寻找Schema对象pre()
函数,它是var RunSchema = new Schema({
[...]
starttime: {
type: Date,
default: Date.now
}
});
RunSchema.pre('save', function(next) {
this.starttime = new Date();
next();
});
的一部分{3}}并允许在保存数据之前执行回调函数的定义。可能这样的事情可以完成所需的工作:
save
请注意,每次创建或更新记录之前,都会调用set
事件的回调函数。因此,这是明确设置"修改"的方法。时间戳。
编辑:
感谢您的评论,我现在对您想要达到的目标有了更好的理解。如果您想在分配数据并将其保留到记录之前修改数据,您可以轻松利用模式的// 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
如果转换过程以任何方式依赖于它,则可选参数{{1}}允许您检查架构字段定义的属性。