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); });