javascript - 如何在保存到 Mongoose (ExpressJS) 之前格式化模型中的数据

标签 javascript node.js mongodb express mongoose

我以字符串格式从用户处获取日期,目前我在创建架构对象并保存之前在 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/

相关文章:

javascript - Z-index 不工作嵌套绝对 div

javascript - 将 Cache-Control 和 Expires header 添加到 Azure Blob 存储 Node JS

node.js - 错误 : Cannot find module 'jasmine-core'

node.js - mongodb npm 中的 db.collection.stats() 等效项是什么?

linux - Raspbian 上的 Mono 和 MongoDB

java - 数据从mongoDB到java

javascript - 如何在 Angular 中发送 undefined object 键而不对其进行硬编码

java - ScriptEngineManager 可以给我它刚刚用 Java 编译的 Javascript 函数的名称吗

javascript - IE11 上的 SVG 自然宽度

node.js - @angular-cli 安装失败,request@2.88.2 : request has been deprecated (mac) 已弃用