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

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

问题背景

在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扩展包就不起作用了,还需要重新安装一遍。再加上一些扩展包存储网站被墙的问题,这个过程真是令人痛不欲生

.Net Core IFormFile 始终为空的问题

前获取上传文件都是使用Request.Form.Files获取,直到这次改成定义形参 IFormFile时才遇到这个问题。方案一:去除[ApiController]这个Attribute,方案二:在[FromForm]里添加Name属性

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

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

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

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

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

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

12个HTML和CSS必须知道的重点难点问题

这12个问题,基本上就是HTML和CSS基础中的重点难点了,也是必须要弄清楚的基本问题,其中定位的绝对定位和相对定位到底相对什么定位?这个还是容易被忽视的,浮动也是一个大坑,有很多细节

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

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

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

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

Js中的返回值问题

如果函数没有返回值(没有return语句),那么就会返回构造函数的实例(p1);如果函数返回了一个基本数据类型的值,那么本次构造函数的返回值是该实例( p1)

如何问一个有效的问题

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

点击更多...

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