2017-10-10 13 views
1

我正在使用節點中的URL module解析輸入到函數的URL輸入。將try catch語句與node.js URL模塊一起用於URL驗證

如果給出相對路徑,則引發TypeError。我使用的是try...catch語句來處理這個如下圖所示:

const { URL } = require('url'); 

try { 
    const absolute = new URL('https://static.pexels.com/photos/126407/pexels-photo-126407.jpeg'); 
    console.log(absolute); 
} catch (e) { 
    if (e instanceof TypeError) { 
    console.log('absolute is a relative path'); 
    } else { 
    throw e; 
    } 
} 

try { 
    const relative = new URL('/images/picture.jpg'); 
    console.log(relative); 
} catch (e) { 
    if (e instanceof TypeError) { 
    console.log('relative is a relative path'); 
    } else { 
    throw e; 
    } 
} 

這是一個合法的應用嘗試catch語句的還是我有點濫用它?如果我錯誤地處理它,正確的方法是什麼?

回答

1

基本上,如果你有一段可能會引發錯誤的代碼,你應該使用try catch塊......並檢查它是否會拋出任何錯誤,你必須檢查文檔。

這裏據我所知,創建一個URL會引發錯誤,所以你做得很好。

另外,當您捕捉到錯誤時,最好在日誌流輸出中記錄錯誤......最好將信息記錄在文本文件中,還記錄時間,日期和代碼的哪一部分是拋出錯誤以及。

UPDATE:

你也可以這樣寫URLCreator.js的模塊處理URL驗證一些給你這樣想:

const {URL} = require(URL); 
function createURL(givenURL, callback) { 
    try { 
     let myURL = new URL(givenURL); 
     callback(myURL); 
    } catch (e) { 
     if (e instanceof TypeError) { 
      //error handling procedure... 
     } else { 
      throw e;//cause we dont know what it is or we want to only handle TypeError 
     } 
    } 
} 

module.exports = createURL; 
+0

感謝您的輸入! 我很期待這個錯誤,因爲絕大多數路徑都是相對的。這是爲了避免登錄嗎?我擔心的是出於其他原因而出現類型錯誤,這在前端沒有看到。 對於上下文,如果您擔心您在任何地方使用它並希望它更乾淨,則此代碼生活在lambda函數 –

+0

中。嘗試編寫一個只處理URL驗證的模塊,您只需要調用該模塊的方法並確保錯誤在其內部處理... –

+0

恐怕我的知識可能不夠深入。你能否將我與文檔聯繫起來,概述爲什麼抽象爲模塊是有益的?這是內部處理的錯誤,我沒有跟着。 –