我将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",
]
}
即技能数组 缺少空字符串值(因为我从req.query获取)。
我还检查了网络面板(在开发人员工具中)。它还显示了正确的JSON。
有人知道可能出现的问题吗?
答案 0 :(得分:2)
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);
});