簡體   English   中英

在保存到 Mongoose (ExpressJS) 之前如何格式化模型中的數據

[英]How to format data in Model before saving in Mongoose (ExpressJS)

我從用戶那里以字符串格式獲取日期,並且在創建 Schema 對象並保存之前,我目前在控制器中轉換為日期。 有沒有辦法將這個邏輯移動到模型中,因為在我看來 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);

雖然我不確定req.body.starttime的含義,但我很確定您正在尋找 Schema objects pre()函數,它是Mongoose Middleware 的一部分,並允許執行回調函數的定義在保存數據之前。 可能像這樣的事情可以完成所需的工作:

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

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

請注意,每次創建或更新記錄之前都會調用save事件的回調函數。 所以這是例如顯式設置“修改”時間戳的方式。

編輯:

感謝您的評論,我現在對您想要實現的目標有了更好的了解。 如果您想在數據被分配並持久化到記錄之前修改數據,您可以輕松利用 Schema 的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允許您檢查架構字段定義的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM