对于get请求 获得请求参数和参数值的问题(高手勿喷)
发布于 9 年前 作者 im-here 6914 次浏览 最后一次编辑是 8 年前 来自 问答

最近接手公司之前一人留下的一个项目。我看他的代码里在处理get请求参数的时候是这么做的: 假如请求url为:http://www.test.com?uid=123&pwd=456

	var url = require('url');
	func(req,res){
		var getQuery = url.parse(req.url, true).query,
			uid = getQuery['uid'],
			pwd = getQuery['pwd'];
	}

他是这样取get请求里参数值的。但是 通过req对象里的query对象直接可取到该url所有请求参数和参数值(如下),他为什么还要通过url模块来转一次?

func(req,res){		
			var uid = req.query.uid,
			pwd =  req.query.pwd;
	}

这样取不是更方便吗?为什么还要用url模块呢?

10 回复

不敢乱讲还是查了下官方文档,url.parse在文档上也并没有说做了任何危险字符的过滤,不知道你们的Node环境版本是多少呢? 只能说下我的猜测,就是有可能这段代码是历史原因吧。 或许这个函数之前他在其他场景下用的。 只是建议你检查下,在拦截器、钩子一类的函数中是否有做安全性过滤。

你要确定你是EXPRESS框架。万一你前辈跟我一样不喜欢三方框架,自己撸了~

var uid = req.query.uid,
pwd =  req.query.pwd;

这种功能是由body.parse提供的 看看package.json/app.js 有没有body.parse 没有的话我觉得就是这样了=。=

@zhuyingda node版本是0.10.32,开发环境windows,生产环境ubuntu

@MiguelValentine 噢,用的是express框架。 req.query.xxx 是第三方框架的了?

@gjc9620 之前有用express.bodyParser,后来换成了connect-multiparty。 我去掉这个模块试试结果。 谢谢!

@imhered 建议升级到4.X版本, 开发环境不建议使用windows,有条件的话上mac 没条件的话ubantu 。 windows环境的Node.js存在各种各样的坑,比如我之前踩过的一个坑就是windows环境下目录分隔符""造成的。

我觉得应该是之前的开发用的是原生 http 模块,后来移植到 express 之后,由于 express 的 res 和 req 是兼容原生模块的,所以这块的代码没有改。

@alsotang 哦,谢谢!

回到顶部