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 返回不正确的数据的主要内容,如果未能解决你的问题,请参考以下文章

nodejs 贝宝 pdt 返回 302

nodejs 学习六 express 三种查询url参数方法

NodeJS_0006:nodejs响应超时处理

NodeJS收发GET和POST请求

nodejs之express -- 2

为啥nodejs接收的值总空的