2015-05-19 81 views
0

我正在通過strongloop的環回提供REST Api。Strongloop loopback:以原子方式鎖定模型實例

我需要通過像一些呼叫添加模型實例的鎖定:

POST /User/{id}/tryLock

返回一個Lock實例,有一些額外的信息:是鎖成功,其用戶鎖定的對象,等等。

我使用的是回送連接器-mysql和我知道,在同步的MySQL我會用某種形式的:

BEGIN TRANSACTION; 
SELECT lockId FROM object WHERE id = objectId FOR UPDATE; 

// This is C++ or Java or whatever: 
if(lockId != NULL) 
    Fatal("Object was locked") 

INSERT INTO locks (objectId, userId, ...); 
UPDATE object SET lockId = locks.lastInsertId WHERE id = objectId; 
COMMIT; 

在loopback中是否可以這樣做?我很樂意將它作爲一個mixin來實現,以便我可以將它用於選定的模型。

謝謝!

回答

0

用的東西是Remote Hooks

User.beforeRemote("tryLock", function(ctx, modelInstance, next) { 
    //put code here  
} 

沒有通過環回連接器MySQL的執行SQL語句的方式。所以我的直覺就是看你是否可以寫入SQL語句(假設你的用戶模式綁定到MySQL並且用戶模型已經通過Arc遷移到MySQL中)。

下面是連接器中可用函數的摘錄 - 您將不得不做一些研究來了解它是如何綁定到模型以查看它是否可訪問。

MySQL.prototype.executeSQL = function(sql, params, options, callback) { 
+0

問題是,(當我明白了這一點),我不能使用環回事務,由於其異步性質。 – Niklas

+0

我剛剛看到了這一點,並會查看它:https://github.com/strongloop/loopback-connector-mysql/pull/99 – Niklas

+0

或者,您可以將事務分解成多個部分,然後在一個SQL語句中運行一個SQL命令時間 - 並在Javascript中評估結果。 –

相關問題