2016-06-13 61 views
0

我試圖在我的StrongLoop服務器中創建功能字段。所以基本上客戶端會發送一個名爲「datas」的字段(數據庫中不可用)的數據,我將在「保存」Observer鉤子並執行自定義處理並保存到名爲「processed_datas_1」和「processed_datas_2」的數據庫字段(這兩個字段在數據庫中可用)。定義具有數據庫中不存在的功能字段的模型

當我嘗試獲取記錄時出現錯誤 - 列「數據」不存在。如何定義數據庫中不存在的字段。 它僅用作吸氣和填塞劑領域。

TIA:d

回答

0

你幹嗎打了一個不存在的屬性?您應該獲取存在的列。要發送不在模型規範中的數據,您只需發送一個對象類型作爲有效負載,然後您可以隨意處理任何內容。

您應該設置一個遠程方法來接受所需的數據,然後使用服務器上的內置CRUD方法寫入數據庫。不要嘗試使用CRUD方法在鬼域上操作。這不僅難以推理,還可能引起人們對代碼庫的新手不熟悉。

MODEL.remoteMethod('customRemoteMethodName', 
    { 
    accepts: [ 
     { 
     arg: 'data', type: 'object' 
     } 
    ], 
    returns: { 
     arg: 'result', 
     type: 'object' 
    } 
    } 
); 

data ARG上面可以包含任何你喜歡的話,和遠程方法裏面,可以書面形式向DB前處理和驗證數據:

MODEL.customRemoteMethodName = function(payload, cb) { 

    // modify payload.datas into processed_datas_1 and processed_datas_2 
    // processData() defined elsewhere or imported 
    let processed = processData(payload.datas); 

    let modelData = { 
    processed_datas_1: processed.data_1, 
    processed_datas_2: processed.data_2 
    //... other required model fields 
    }; 

    // suggest validation here 

    // use built in CRUD with processed data 
    // 
    MODEL.create(modelData, function(err, modelInstance) { 
    if(err) {return cb(err);} 

    // call remote method callback to return result to client 
    cb(null, modelInstance); 

    }); 

}; 

的觀察掛鉤可有時很有用,但對於他們可以提供的「神奇」處理,再三考慮一下是個好主意。這些與實際模型定義無關的「副作用」可能會導致與新成員在一個團隊中編寫文檔和編碼方面的問題。

通過使用自定義的遠程方法時,所添加的代碼,爲的文檔(命名遠程方法類似MODEL.processAndCreate),並在同一時間將所有數據操作直接在開發商面前。

+0

TY爲建議,但迴環不是我用我的移動客戶端唯一的API,我有我的移動客戶端中的服務器包裝可以選擇使用哪個服務器API,所以各種API的方法需要保持相似。 –

相關問題