express主体解析器中间件将数据放入属性名称中

express body-parser middleware puts data into the property name

本文关键字:属性 数据 主体 中间件 express      更新时间:2023-09-26

我是nodeJS Express框架的新手。我正在使用我使用以下方式发送的POST请求:

router.post('/', function(req, res) {
    var data = Object.getOwnPropertyNames(req.body)[0];
});

我已经通过从客户端发送了这些数据

$.ajax({
    url: "write_to_region",
    type: "POST",
    data: JSON.stringify(grid)
});

其中"grid"是值的2d数组。我的express body解析器配置如下:

app.use(bodyParser.urlencoded({limit: '50mb', extended: false }));

做这件事的更好或更惯用的方法是什么?请注意,数组有点大(10kb),并且只包含整数。理想情况下,我会尽量减少请求中发送的数据量。谢谢

问题是您没有设置适当的Content-Type。Jquery对于POST ing数据的默认Content-Typeapplication/x-www-form-urlencoded。因此,主体解析器开始读取请求数据,寻找=来知道"键"何时结束,"值"何时开始。它永远找不到=,所以它一直附加到密钥名称。

要解决此问题,您需要在$ajax()配置中添加以下选项:

contentType: "application/json; charset=utf-8",
dataType: "json",

并添加bodyParser.json()中间件:

app.use(bodyParser.json());