Node中url.parse(url, true).query:[Object: null prototype]问题

更新日期: 2019-08-29阅读: 1531标签: 问题

问题背景

在node v13.5.0中通过url模块解析get请求参数的时候,遇到query: [Object: null prototype]

var  url  =  require("url");
var  params  =  url.parse("/?name=hello&&age=12", true);

console.log(params);

//  query: [Object: null prototype] { name: 'hello', age: '12' }

如果我们在node中console.log一个null prototype,就会出现[Object: null prototype]

const obj1 = Object.create(null);
obj1['key'] = 'SomeValue' ;
console.log(obj1); 
// [Object: null prototype] { 'key' : 'SomeValue' }

const obj2 = {};
obj2['key'] = 'SomeValue' ;
console.log(obj2); 
// { 'key' : 'SomeValue' } 

而上面会出现这个问题的原因也许跟解析url的库有关,url.parse(req.url, false / true ) ,设置true时URL encoded 使用qs,设置false时 , 使用query-string,参考stackoverflow

解决方法

解决这个问题,可以通过JSON.stringify()和JSON.parse()

var url = require("url");

var params = JSON.stringify(url.parse("/?name=hello&&age=12", true).query);
console.log(JSON.parse(params));

// { name: 'hello', age: '12' }


WHATWG URL api

url 模块用于处理与解析 URL。url 模块提供了两套 API 来处理 URL:一个是旧版本遗留的 API,一个是实现了 WHATWG标准的新 API。

在node 7.0以后,已经支持WHATWG URL API,了解更多

var url = require("url");
var params = new URL("/?name=hello&&age=12", "http://localhost:8888/");

console.log(params);

// 输出结果
URL {
  href: 'http://localhost:8888/?name=hello&&age=12',
  origin: 'http://localhost:8888',
  protocol: 'http:',
  username: '',
  password: '',
  host: 'localhost:8888',
  hostname: 'localhost',
  port: '8888',
  pathname: '/',
  search: '?name=hello&&age=12',
  searchParams: URLSearchParams { 'name' => 'hello', 'age' => '12' },
  hash: ''
}

console.log(params.searchParams.get("name")); // hello

链接: https://www.fly63.com/article/detial/7969

解决mac上每次升级nodejs都要重新安装扩展包的问题

以前用起来没注意到这个现象,最近一段时间发现,每次随着使用brew upgrade自动升级了nodejs版本,原来安装的nodejs扩展包就不起作用了,还需要重新安装一遍。再加上一些扩展包存储网站被墙的问题,这个过程真是令人痛不欲生

点击form 表单中的button导致页面刷新问题

做点击按钮切换背景样式与内容的时候每次都刷新页面 ,发现button写在了form 标签当中,将input或者button的type属性改为button,点击按钮页面就不会自动重新加载了。

解决ios端点击出现闪烁或黑色背景的问题

最近开发一个简单的H5页面,在IOS端测试的时候发现,点击按钮会闪动,出现一个黑色的背景一闪而过,影响用户体验。在ios端,safari浏览器上触发click事件有300ms的延迟相应

前端开发中遇到的一些问题

页面两个标签(非block样式)之间有一个小margin,样式怎么改都去不掉 ;app上点击有背景;手机端input边框阴影;chrome模拟器里点击元素错位;git push 报错RPC failed;

在ios端点击按钮闪烁解决方法

在ios端,safari浏览器上触发click事件有300ms的延迟响应,为touch添加的样式会和click冲突而出现闪烁问题,在safari中触摸事件的相应顺序如下:

js中使用append应注意自动补全问题

一般的标签是如<td></td>、<tr></tr>、<div></div>以成对出现,如果缺少一个都会出错,而append为了保证页面代码的准确性,会对标签进行自动补全,如

如何问一个有效的问题

提问前最好自己过一遍,看有哪里描述不清晰的,哪里表达不通顺,以及是否可以通过现有的这套描述可以让对方很清晰的知道问题所在。 问题:XXX 版本的 XXX 接口调用返回的数据不符合预期。

vue常见问题汇总及解决方案

找不到某些依赖或者模块这种情况一般报错信息可以看到是哪个包抛出的信息.,一般卸载这个模块,安装重新安装下即可。为什么要 return 一个数据对象呢? 官方解释如下: data 必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例。

解决前端常见问题:竞态条件

竞态条件一词翻译自英语 race conditions。当我们在开发前端 web 时,最常见的逻辑就是从后台服务器获取并处理数据然后渲染到浏览器页面上,过程中有不少的细节需要注意

6 个意想不到的 JavaScript 问题

作为前端开发工程师,JavaScript 是我们的主要开发语言,它本身语法比较简单,并且生态系统也非常完善,在社区的影响力越来越大。在我们使用过程中,经常会遇到各种奇怪的问题

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!