2012-08-22 28 views
3

我發現在mongoose docs,我可以處理一般的錯誤,我想要的。所以你可以這樣做:Mongoose錯誤處理在一個地方

Product.on('error', handleError); 

但是這個handleError方法的簽名是什麼?我想要這樣的東西:

handleError = (err) -> 
    if err 
    console.log err 
    throw err 

但這不起作用。

回答

5

它是標準的節點爲error事件提供一個參數,這是錯誤本身。根據我的經驗,即使只有少數提供附加參數的庫始終將錯誤作爲第一項,以便您可以使用帶簽名function(err)的函數。

您也可以在GitHub上查看源代碼;這裏的預先保存鉤發出的error事件,與錯誤作爲參數,當出現出錯:https://github.com/LearnBoost/mongoose/blob/cd8e0ab/lib/document.js#L1140

還有在JavaScript中一個非常簡單的方法,看看傳遞給函數的所有參數:

f = -> 
    console.log(arguments) 

f()      # {} 
f(1, "two", {num: 3}) # { '0': 1, '1': 'two', '2': { num: 3 } } 
f([1, "two", {num: 3}]) # { '0': [ 1, 'two', { num: 3 } ] } 

所以,現在到你的功能無法正常工作的一部分;你的代碼如何讀取?名字handleError並不是什麼特別的;您需要之一這兩個:

選項1:定義該函數,並傳遞一個參考到的事件登記:

handleError = (err) -> 
    console.log "Got an error", err 

Product.on('error', handleError) 

選項2:定義該函數內聯:

Product.on 'error', (err) -> 
    console.log "Got an error", err 
+0

我這樣做,但是當發生錯誤時,我在控制檯中看不到我的消息。 – zishe

+9

可能值得注意的是,如果你定義了一個回調函數,那麼處理程序將不會運行,所以如果你使用Product.save(function(err,doc){})',那麼你可以自己處理錯誤。 – numbers1311407