从POST快速解析数组

use*_*674 5 node.js express body-parser

运行Express API,我很难在点击POST路由时正确解析包括对象数组的数据.

代码的简化版本 -

var express = require('express');
var app = express();
var router = express.Router();
var bodyParser = require('body-parser');
var parseUrlencoded = bodyParser.urlencoded({ extended: false });

router.post('/', parseUrlencoded, function(req, res) {
    console.log(req.body);
});
Run Code Online (Sandbox Code Playgroud)

点击API与以下内容

{ name: "Object name", 
  arrayOfObjects: [
      { name: "Sub Object Name", subType: "Sub Object Type" }, 
      { name: "Sub Object Name 2", subType: "Sub Object Type 2" }
  ] 
}
Run Code Online (Sandbox Code Playgroud)

退出

{ name: "Object name", 
  'arrayOfObjects[0][name]': "Sub Object Name",
  'arrayOfObjects[0][subType]': "Sub Object Type",
  'arrayOfObjects[1][name]': "Sub Object Name 2",
  'arrayOfObjects[1][subType]': "Sub Object Name",
}
Run Code Online (Sandbox Code Playgroud)

我希望将此作为数组接收,这是使用PUT请求时的情况.

我确信这可能使用bodyParser或类似的配置,但我很难找到一个好的解决方案.

Bha*_*san 14

好的,从你的问题我明白你想像json数组一样操作POST Body然后使用qs库 通过扩展 true

app.use(bodyParser.urlencoded({ extended: true }));
Run Code Online (Sandbox Code Playgroud)


J.C*_*ras 5

您可以发送字符串而不是数组,并将extended选项保留为false。

从您前面的js:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
$.ajax("/send", {
     data: { "strArr": fruits.join() },
     type: "POST",
     async: true,
 ......
Run Code Online (Sandbox Code Playgroud)

从您的服务器js:

router.post('/send', function(req, res) {
    var fruits = req.body.strArr.split(",");
    console.log(fruits); // This is an array
});
Run Code Online (Sandbox Code Playgroud)