九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
解決在Node中出現(xiàn) [Object: null prototype] 的問題

解決辦法

先說最后的解決辦法:之所以會有問題,因為用的是url的舊接口,該接口已經(jīng)廢棄了。應(yīng)該用新的接口

  1. const url = require('url');
  2. let obj = new URL('http://test.com/index?name=YulRW&message=ok');
  3. console.log(obj);

如果路徑不完整的話可以這樣用

  1. const url = require('url');
  2. let obj = new URL('/test?name=YulRW&message=666','http://localhost:8088/');
  3. console.log(obj);

解決過程

我在B站學(xué)習Node的過程中,跟著老師的方法用

  1. const url = require('url');
  2. let obj = url.parse(req.url,true);
  3. console.log(obj.query);

想要通過url模塊的parse方法獲取傳過來的路徑里面的鍵值對對象
像這樣:


可是我發(fā)現(xiàn)我自己的代碼執(zhí)行后是這樣的:

因為里面多了個 [Object: null prototype] 所以導(dǎo)致我不能直接從query對象里面點出來一個屬性。
平常都是自己在百度里搜索看別人的經(jīng)驗然后來解決問題的,但是這次網(wǎng)上僅有一條提問,而且還沒有解決問題。無奈只好自己去找解決辦法。
首先想到了去外國網(wǎng)站上找,谷歌了一下發(fā)現(xiàn)確實有不少人也問 [Object: null prototype] 的問題。

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中這樣時:

  1. const obj1 = Object.create(null);
  2. obj1['key'] = 'SomeValue' ;
  3. console.log(obj1);
  4. >> [Object: null prototype] { 'key' : 'SomeValue' }

就會出現(xiàn) [Object: null prototype]

而這樣:

  1. const obj2 = {};
  2. obj2['key'] = 'SomeValue' ;
  3. console.log(obj2);
  4. >> { '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)了這行字:


暈,原來已經(jīng)被廢棄了。怪不得會出問題。心想我看的b站視頻也不過是17年的,就過了兩年就變化那么大…更新還是蠻快的。

所以說,官方文檔還是蠻重要啊。網(wǎng)上沒有的問題,或許查查文檔就有解決辦法了呢?

它說要用 WHATWG URL API ,那么什么是 ** WHATWG URL API** 呢?
繼續(xù)往上翻找到這個:


哦豁!不錯,是我要的!
然后再根據(jù)文檔教程寫:

  1. const url = require('url');
  2. let obj = new URL('/test?name=YulRW&message=666','http://localhost:8088/');
  3. console.log(obj);

結(jié)果:

舒服了!剩下的就不用我說了吧?照著用就好了。

不過需要注意的一點是,如果路徑是以/開頭的那種不完整路徑,需要再第二個參數(shù)里面把前面的補上(參考我發(fā)的圖),如果是一個完整的路徑那么只要第一個參數(shù)就好了,例如:

let obj = new URL('http://baidu.com/index?name=YulRW&message=666');

OK了!問題解決了!

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JS的原型和繼承
熬夜7天,我總結(jié)了JavaScript與ES的25個知識點
ES6,ES7,ES8,ES9,ES10新特性一覽
15 個你應(yīng)該知道的JavaScript 對象基礎(chǔ)知識
java開發(fā)之常用的Javascript對象方法整理分享
JS類型判斷typeof PK {}.toString.call(obj)
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服