2017-10-10 14 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

恐怕我的知识可能不够深入。你能否将我与文档联系起来,概述为什么抽象为模块是有益的?这是内部处理的错误,我没有跟着。 –