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

时间:2013-11-07 14:18:33

标签: javascript jquery ajax json node.js

我将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。

有人知道可能出现的问题吗?

1 个答案:

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