2013-07-10 45 views
3

我正在尋求標準化來自流星允許和拒絕規則的錯誤消息。我不想在客戶端的回調中定義錯誤,而是希望服務器響應正確的錯誤消息,以便我只需定義一次。從允許/拒絕的文檔:流星:從允許和拒絕規則定製錯誤消息

如果他們認爲該操作應該被允許,函數應該返回true。否則,他們應該返回false,或者根本沒有(undefined)。

但是,如果我在拒絕函數中拋出一個錯誤,錯誤被髮送給用戶。即在否認:

throw new Meteor.Error(404, "Not the owner"); 

,並在客戶端上:

SomeCollection.remove(someId, function(err, result) { 
    console.log(err.message); // Outputs "Not the owner" 
}); 

似乎是一個簡單的方式遍佈該網站顯示相同的錯誤。即使文檔明確指出我們應該在拒絕/允許中返回true/false,這是否是一種有效的方法?

+0

作爲旁註:您發送的HTTP錯誤代碼應該是['403'(「禁止」)](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4 )而不是'404'(「找不到」);) – MattiSG

回答

3

從文檔的這一部分:

http://docs.meteor.com/#meteor_error

頭三句:

If you want to return an error from a method, throw an exception. Methods can throw any kind of exception. But Meteor.Error is the only kind of error that a server will send to the client. 

這聽起來像你對我正在做的是正確的。我不得不懷疑,你的UI不應該讓用戶有這樣的信息出現嗎?除了「哎呀,你不應該被允許這樣做,恢復你的行動。」如果意外地允許未經授權的查詢通過的錯誤。

+2

這是一個有效的問題。我希望能夠給用戶一些額外的反饋。例如,插入或更新可能被禁止,因爲名稱字段驗證唯一約束,或者在插入或其他內容超過15分鐘後無法更新評論。用戶必須採取的行動取決於導致錯誤的原因。能夠將所有邏輯放在一個地方,並用指導用戶的消息進行迴應將會非常整齊。 – datacarl

1

您不能在流星允許/拒絕回調中拋出異常。這樣做將打破Meteor將檢查的回調鏈,以確保文檔的操作通過。

實施例:

流星將通過至少一個校驗允許規則,只要1個返回true,操作成功。

允許1 - >允許2 - >允許3

流星也將通過所有的拒絕規則檢查,只要1返回真,則操作失敗

拒絕1

如果在允許1上拋出異常而不是返回false(因爲它應該在用戶不被允許做某事時),流星從不檢查允許2和3,即使它們會返回true。這樣就打破了連鎖。

+1

不,允許規則是根據修改類型定義的(http:// docs。meteor.com/#/basic/Mongo-Collection-allow)('insert','update','remove')。由於修改只能是一種類型,因此不可能針對多個「allow」規則進行檢查。 – MattiSG

+0

@MattiSG這是錯誤的。來自文檔「您可以隨意調用允許次數,每次調用都可以包含插入,更新和刪除功能的任意組合。」 – Gigo

相關問題