不要再用url.parse()了!
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,提高获取和提取信息的能力才是提升水平的必由之路。