nodejs如何正確接收陣列和物件
阿新 • • 發佈:2018-12-05
文章目錄
需求
今天接收頁面Form表單POST請求送來的多層物件,得到的資料如下:
user[name]=zhao&user[pass]=111
因為Form表單預設的content-type是 x-www-form-urlencoded
解決過程
那麼nodejs怎麼將上面的資料正確轉成我們想要的資料?
-
因為我用的是express框架,所以我預設就使用了
body-parser
這個中介軟體,得到的res.body:console.log(res.body)
很明顯,
body-parser
只能解析單層物件 -
這時我想到了express自帶的querystring中介軟體,好像就是專門解決這類資料的,結果
console.log(res.body) // {'user[name]: 'zhao', 'user[pass]: 111}
與第一種得到的結果一模一樣
-
這時我想是不是express自帶是簡化版,所以就去npm搜一下,找到了一個熱門的
query-string
,看了文件發現功能確實比express自帶的多,但只能正確解析陣列,不能解析多層物件,比如const queryString = require('query-string') queryString.parse('foo[0]=1&foo[1]=2&foo[3]=3', {arrayFormat: 'index'}); //=> foo: [1,2,3]
-
說實話這時候是有點氣餒,只好google了。
google了半天,得到的結論就是將content-type改為application/json,但這不是我想要的。 -
正當我快放棄時,我突然在npm看到
qs
這個npm包,開啟文件,果然,你想要的都在:const qs = require('qs'
不管多少層巢狀,都能正確解析
最後確實得說一下npm包這個問題,相同或相似型別的npm包實在是太多,而且有時候熱門的還有好幾個,確實有點難區分,可能有更好的,但怎麼才能找到最好的,這確實是個問題?