我以字符串格式从用户处获取日期,目前我在创建架构对象并保存之前在 Controller 中转换为日期。有没有一种方法可以将这种逻辑转移到模型中,因为在我看来模型是正确的地方
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 Middleware 的一部分并允许在保存数据之前执行回调函数的定义。可能像这样的事情完成了所需的工作:
var RunSchema = new Schema({
[...]
starttime: {
type: Date,
default: Date.now
}
});
RunSchema.pre('save', function(next) {
this.starttime = new Date();
next();
});
请注意,每次创建或更新记录之前,都会调用 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
允许您检查模式字段定义的属性。
关于javascript - 如何在保存到 Mongoose (ExpressJS) 之前格式化模型中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23512683/