NodeJS> req.query正在返回不正确的数据

我发送一个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", ] } 

即它缺less 技能数组中 的空string值 (因为我从req.query中获得)。

我也检查了networking面板(在开发工具内)。 它也显示了正确的JSON。

有没有人有任何想法可能会出错?

Connect(构buildExpress)使用第三方qs模块而不是内置查询string模块来parsingURL查询string。

您的数据被jQuery序列化到以下查询string中:

 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[] ,其中包含空格)。

如果我给这个stringquerystring.parse() – 内置的parsing器 – 我得到你期待的结果:

 { designation: 'Software Developer', 'skills[]': [ '', 'ASP.NET', 'PHP', '', '', '', 'NodeJS', '', '' ] } 

如果我把string给qs.parse ,我会得到和你的应用程序相同的结果。

这种行为是一个开放性的qs问题 ,但一年半来一直没有解决。 你可能会错误的TJ或尝试自己解决这个问题。

同时,你可以使用querystring而不是qs来解决bug。 我只是使用url.parse来重新parsing原始url。

 var url = require('url'); app.get('/', function(req, res) { console.log(url.parse(req.originalUrl, true).query); });