不要再用url.parse()了

不要再用url.parse()了!

localhost:4396/test?id=234 为例

const url = require('url')

const server = http.createServer((req, res) => {
   const { query, pathname } = url.parse(req.url, true)
   console.log(query)
   console.log(pathname)
   ...

输出结果:

[Object: null prototype] { id: '234' }
/test

可以看到query是一个没有原型的对象,意味着不存在toString()这种内置方法,除此之外也可能埋藏意料之外的隐患,总而言之这都是开发过程中需要避免的。

查阅一下Node.js文档,发现url.parse()被标记Deprecated(已废弃),意味着除了安全问题,性能方面也难以保证。所以与其考虑解决方法,不如考虑其替代品。

WHATWG URL API

自Node.js 7.0.0 起,url库就提供了更现代的,符合WHATWG URL标准的API。

url库提供了URL类,包含了替代原有的api的属性和方法,从 v10.0.0 起,URL类就被添加为全局对象,不需要引入模块。如上面的代码就可以替换成

const {URL} = require('url') //可以省略

const server = http.createServer((req, res) => { 
   const myURL = new URL(req.url, `http://${req.headers.host}`)
   const query = myURL.searchParams
   const pathname = myURL.pathname
   console.log(query)
   console.log(pathname)
   ...

输出结果

URLSearchParams { 'id' => '234' }
/test

其中URLSearchParams是一个可以处理url 查询的类,比如最简单的query.get('id')就可以获取名为id的参数,非常方便,更多的使用方法可以阅读文档

总结

现在很多的教程还在用url.parse()处理url,可见编程光靠看教程是不够的,多查阅文档,多上StackOverflow,多读一些blog,提高获取和提取信息的能力才是提升水平的必由之路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值