javascript - 在 ExpressJS 中使用带有数组的 JSON

标签 javascript jquery node.js express

在网页上,我使用 jQuery 发布一些 JSON:

$.post('/url', data);

我的数据是一个包含一些值和数组的 javascript 对象。 JSON.stringify(data) 看起来像:

{"favoriteAnimal":"piglet", "okayAnimals":["cats","dogs"]} 

我正在使用 ExpressJS(与 body-parser 中间件相连)在 NodeJS 网络应用程序中使用此 JSON。我可以检索最喜欢的动物,如 req.body.favoriteAnimal,它会给我字符串 piglet,这一切都很好,很漂亮。

但是我如何访问数组中的值呢?

req.body.favoriteAnimal // piglet
req.body.okayAnimals // undefined
req.body.okayAnimals[] // syntax error

这行得通...

req.body['okayAnimals[]']

...但闻起来有鱼腥味。如果正在发布的原始数据在其数组中仅包含一个元素,它也不会返回一个数组(它只返回一个字符串)。

JSON 的 jQuery 编码或 ExpressJS 中的解码是否发生了某些事情,这阻止了我像 req.body.okayAnimals 一样访问它并每次都获取一个数组?

最佳答案

Kevin 的回答几乎让我明白了。

$.post('/url', JSON.stringify(data)) 将发送更近一步的字符串。不幸的是 jQuery 的 $.post 设置了错误的标题

Content-Type:application/x-www-form-urlencoded; charset=UTF-8

ExpressJS 的主体解析器无法正确处理。你最终得到了

req.body={"{\"favoriteAnimal\":\"piglet\",\"okayAnimals\":[\"cats\",\"dogs\"]}":""}

我重写了发送数据的方式。

$.ajax({
  url: '/url',
  type: 'POST',
  data: data,
  contentType: 'application/json; charset=utf-8',
  dataType: 'json'
})

我看到我的浏览器发送了正确的 header

Content-Type:application/json; charset=UTF-8

观察

req.body={"favoriteAnimal":"piglet","okayAnimals":["cats","dogs"]}

关于javascript - 在 ExpressJS 中使用带有数组的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536890/

相关文章:

javascript - SocketIO和NodeJS没有express?

javascript - 在来自 ajax 的 php 中使用父 php 中定义的变量

javascript - 如何在给定点直接或通过另一个元素的空腔检测哪个元素可见/位于顶部?

node.js - node.js 中的 http.get 和查询字符串

javascript - 在 JavaScript 的 POST 请求中发送 Json 数组

javascript - 无法让 Select2 从我的 mysql 数据库获取数据

jquery - RegEx 只有数字和单位添加退格问题

javascript - 如何在 typescript 中声明成功/失败返回类型

javascript - Shelljs:如何取消异步进程?

javascript - JQuery UI 选项卡 : Add tab at the second position