摘要:所有鉤子函數調用時,為對應的實例,所以你可以訪問到與之相關的任何東西。對于所有鉤子,你可以添加一個額外的參數到鉤子函數中。這個問題的原因是,對象僅僅在頂級鉤子函數的作用域內是有效的,而在回調中會有各種不同的值。
譯者:飛龍
來源:Model Hooks
如果你想要監聽發生在模型實例上的事件,你可以附帶一個函數,它會在發生時調用。
現在支持下面這些事件:
afterLoad:(無參數)加載和準備所用實例之后;
afterAutoFetch:(無參數)自動獲取關聯(如果有的話)之后,無論有沒有關聯都會觸發;
beforeSave:(無參數)嘗試保存之前;
afterSave:(bool success)保存之后;
beforeCreate:(無參數)嘗試保存新的實例之前(優先于beforeSave);
afterCreate:(bool success)保存新的實例之后;
beforeRemove:(無參數)嘗試刪除實例之前;
afterRemove:(bool success)刪除實例之后;
beforeValidation:(無參數)在所有驗證之前,優先于beforeCreate和beforeSave。
所有鉤子函數調用時,this為對應的實例,所以你可以訪問到與之相關的任何東西。
對于所有before*鉤子,你可以添加一個額外的參數到鉤子函數中。這個函數用來告訴鉤子應該繼續執行下去還是中斷。你或許已經從Express的工作流中熟悉了這一點。下面是一個示例:
var Person = db.define("person", { name : String, surname : String }, { hooks: { beforeCreate: function (next) { if (this.surname == "Doe") { return next(new Error("No Does allowed")); } return next(); } } });
這個工作流允許你在調用next之前執行異步的操作。如果你不打算使用next就不要把它定義為參數,否則會阻塞工作流。
常見問題一個常見問題涉及到在鉤子內部的嵌套回調中訪問this。這個問題的原因是,this對象僅僅在頂級鉤子函數的作用域內是有效的,而在回調中會有各種不同的值。要解決這一問題,可以創建一個對象保存this的引用,并且在回調中用它來訪問模型的屬性。
示例
var Person = db.define("person", { name : String, surname : String }, { hooks: { beforeCreate: function (next) { var _this = this; checkName(this, function(err, result)) { if(err) return next(err); _this.name = result.name; _this.surname = result.surname; next(); } } } });
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/17506.html
摘要:譯者飛龍來源在連接之后,你可以使用連接對象來定義你的模型。你需要指定模型的名稱,一個用于描述的屬性和一些可選的選項。在這個例子中,有個模型方法叫做。接收的第一個對象第二個參數被稱為屬性對象,它定義了所有的屬性。在屬性修改時自動保存模型。 譯者:飛龍 來源:Defining Models 在連接之后,你可以使用連接對象(db)來定義你的模型。你需要指定模型的名稱,一個用于描述的屬性和...
摘要:譯者飛龍來源同步是一項功能方法,可以在數據庫里為你的模型和關聯創建所需的表來工作。現存的表并不會被替換,它們只會在不存在的時候被創建。刪除也有兩種方式。從指定模型中刪除所有表和為模型創建表 譯者:飛龍 來源:Syncing and dropping models 同步是一項功能方法,可以在數據庫里為你的模型和關聯創建所需的表來工作。現存的表并不會被替換,它們只會在不存在的時候被創建...
閱讀 3676·2021-11-24 09:39
閱讀 1283·2021-09-30 09:48
閱讀 3273·2021-09-09 11:51
閱讀 2895·2021-09-08 10:41
閱讀 1337·2019-08-30 14:06
閱讀 2806·2019-08-30 14:01
閱讀 882·2019-08-29 17:11
閱讀 3180·2019-08-29 15:37