NodeJS > req.query 返回不正确的数据
Posted
技术标签:
【中文标题】NodeJS > req.query 返回不正确的数据【英文标题】:NodeJS > req.query is returning incorrect data 【发布时间】:2013-11-19 05:35:09 【问题描述】:我正在将 JSON(从客户端)发送到 NodeJS 服务器,如下所示:
$.ajax(
type: "POST",
dataType: "jsonp",
url: "www.xyz.com/save",
data:
designation: "Software Developer",
skills: [
"",
"ASP.NET",
"php",
"",
"",
"",
"NodeJS",
"",
""
]
);
在接收端(即 NodeJS 服务器),我打印 JSON(带有 console.log)如下:
save = module.exports = ;
save.setup = function( app )
app.get( '/save', function(req, res)
console.log(req.query);
);
问题在于会打印以下内容:
designation: "Software Developer",
skills: [
"ASP.NET",
"PHP",
"NodeJS",
]
即它在 skills 数组中缺少空字符串值(我从 req.query 中得到它)。
我还检查了网络面板(在开发人员工具中)。它还显示了正确的 JSON。
有人知道可能出了什么问题吗?
【问题讨论】:
试试req.body.skills
这是一个很好的问题,听起来像 Josh 所说的 qs 问题。尽管如此,我还是鼓励您重新考虑这种方法,而不是重新配置解析查询参数的方式——为什么这些数组中需要有空格?
@tymeJV req.body.skills 很有帮助。
【参考方案1】:
Connect(构建 Express 的基础上)使用第三方 qs 模块而不是内置的 querystring 模块来解析 URL 查询字符串。
您的数据被 jQuery 序列化为以下查询字符串:
designation=Software+Developer&skills%5B%5D=&skills%5B%5D=ASP.NET&skills%5B%5D=PHP&skills%5B%5D=&skills%5B%5D=&skills%5B%5D=&skills%5B%5D=NodeJS&skills%5B%5D=&skills%5B%5D=
(这是多个名为 skills[]
的参数,其中包括空格。)
如果我将该字符串提供给querystring.parse()
(内置解析器),我会得到您期望的结果:
designation: 'Software Developer',
'skills[]':
[ '',
'ASP.NET',
'PHP',
'',
'',
'',
'NodeJS',
'',
'' ]
如果我将字符串提供给 qs.parse
,我会得到与您在应用中看到的结果相同的结果。
This behavior is an open qs
issue,不过一年半没解决。您可以就此向 TJ 提出问题或尝试自己解决问题。
与此同时,您可以使用querystring
而不是qs
来解决该错误。我只是使用url.parse
重新解析原始网址。
var url = require('url');
app.get('/', function(req, res)
console.log(url.parse(req.originalUrl, true).query);
);
【讨论】:
太棒了。有效。请注意,“skills”数组现在以“skills[]”的形式出现。 很难相信这仍然是一个问题,但确实如此。这救了我。谢谢!以上是关于NodeJS > req.query 返回不正确的数据的主要内容,如果未能解决你的问题,请参考以下文章