Expressjs如何从客户端正确传递数组并使用它?

时间:2015-11-28 10:58:36

标签: javascript node.js express

我有一个看起来像这样的对象:

editinvite: {
  _id: '',
  title: '',
  codes_list: []
}

问题是我无法访问NodeJS应用中的codes_list。它显示为' undefined' (其他非数组变量工作正常)

router.post('/inviteEdit', function (req, res) {
...
console.log(req.body.codes_list);

// Output:
undefined

注意我尝试使用codes_list,我的意思是我想将其直接传递给我的更新参数:

var update = {
        title: req.body.title,
        codes_list: req.body.codes_list,
    };

(额外信息) console.log(req.body)的输出:

{ _id: '565981a16a75a7522afdcc8b',
  title: 'as',
  'codes_list[0][code]': '0EHC',
  'codes_list[0][_id]': '565981a16a75a7522afdcc8c',
  'codes_list[0][used]': 'false',
  'codes_list[1][code]': 'VDQ2',
  'codes_list[1][_id]': '565981a16a75a7522afdcc8d',
  'codes_list[1][used]': 'false' }
发送前

(额外信息) editinvite对象,在FF调试器上看起来像这样: enter image description here

(额外信息)我的ajax电话:

$.ajax({
   type: 'post',
   url: this.server + '/inviteEdit',
   dataType: 'json',
   data: this.editinvite,
   crossDomain: true,
   success: function (data, status, jqXHR) {
   ...

(额外信息)我在节点应用中使用这些参数

app.use(bodyParser.urlencoded({
    extended: false
}));
app.use(bodyParser.json());

1 个答案:

答案 0 :(得分:1)

引自body-parser文档:

  

bodyParser.urlencoded(options)返回仅解析的中间件   urlencoded身体。此解析器仅接受正文的UTF-8编码,并支持gzip和deflate编码的自动膨胀。

     

在主页上填充包含已解析数据的新主体对象   中间件后的请求对象(即req.body)。这个对象会   包含键值对,其中值可以是字符串或数组   (当扩展为false时)或任何类型(当扩展为真时)。

所以基本上如果你只想要解析字符串或数组,你可以设置扩展为false,对于其他类型(比如在你的case对象数组中),你需要将它设置为true。