先說最后的解決辦法:之所以會有問題,因為用的是url的舊接口,該接口已經(jīng)廢棄了。應(yīng)該用新的接口
- const url = require('url');
- let obj = new URL('http://test.com/index?name=YulRW&message=ok');
- console.log(obj);
如果路徑不完整的話可以這樣用
- const url = require('url');
- let obj = new URL('/test?name=YulRW&message=666','http://localhost:8088/');
- console.log(obj);
我在B站學(xué)習Node的過程中,跟著老師的方法用
- const url = require('url');
- let obj = url.parse(req.url,true);
- console.log(obj.query);
想要通過url模塊的parse方法獲取傳過來的路徑里面的鍵值對對象
像這樣:
在 stackoverflow 上,一個層主是這么回答的:
https://stackoverflow.com/questions/53636028/how-do-i-get-rid-of-object-null-prototype-in-visual-studio-terminal
結(jié)合自己的理解簡單翻譯下來就是(我英語不好勉強翻譯,有錯請見諒):
因為我們console了一個空對象,該對象沒有原型,所以會顯示出 [Object: null prototype](沒有原型的意思是沒有繼承屬性和方法,例如toString、hasOwnProperty等每個實例化每個對象時都會具有的方法)
當我們在node中這樣時:
- const obj1 = Object.create(null);
- obj1['key'] = 'SomeValue' ;
- console.log(obj1);
- >> [Object: null prototype] { 'key' : 'SomeValue' }
就會出現(xiàn) [Object: null prototype]
而這樣:
- const obj2 = {};
- obj2['key'] = 'SomeValue' ;
- console.log(obj2);
- >> { 'key' : 'SomeValue' }
就不會出現(xiàn) [Object: null prototype]
此外,說是因為在 url.parse(req.url, false / true ) 時,會根據(jù) true 或者 false 來選擇不同的library來解碼,
比如當選擇true時用 qs
而當選擇了false時用 query-string
至于他們有什么不同…之后我就不再講了…感覺涉及的知識比較深入了。有興趣的可以看下下面的連接:
https://stackoverflow.com/questions/29136374/what-the-difference-between-qs-and-querystring
由于沒有解決問題,我繼續(xù)查,突然想到可以翻閱Node文檔,或許可以找到我想要的。
果然打開以后發(fā)現(xiàn)了這行字:
所以說,官方文檔還是蠻重要啊。網(wǎng)上沒有的問題,或許查查文檔就有解決辦法了呢?
它說要用 WHATWG URL API ,那么什么是 ** WHATWG URL API** 呢?
繼續(xù)往上翻找到這個:
- const url = require('url');
- let obj = new URL('/test?name=YulRW&message=666','http://localhost:8088/');
- console.log(obj);
結(jié)果:
舒服了!剩下的就不用我說了吧?照著用就好了。
不過需要注意的一點是,如果路徑是以/開頭的那種不完整路徑,需要再第二個參數(shù)里面把前面的補上(參考我發(fā)的圖),如果是一個完整的路徑那么只要第一個參數(shù)就好了,例如:
let obj = new URL('http://baidu.com/index?name=YulRW&message=666');
OK了!問題解決了!
聯(lián)系客服