如何使用Node.js在服务器上接收与客户端发布数据格式相同的发布数据?

时间:2019-08-20 10:28:12

标签: javascript node.js express body-parser

我有以下格式的帖子数据

{"geoJSON":{"type":"Feature","geometry":{"type":"LineString","coordinates":[[-102.038635,36.800488],[-94.567716,36.800488],[-96.149793,43.381098],[-104.060178,43.508721]]}}}

服务器上的格式相同,但是收到了以下格式

{"geoJSON":{"type":"Feature","geometry":{"type":"LineString","coordinates":[["-102.038635","36.800488"],["-94.567716","36.800488"],["-96.149793","43.381098"],["-104.060178","43.508721"]]}}}

您可以看到coordinates属性的区别。将双引号添加到服务器接收的coordinates数组中的每个值中。如何获得与客户发布数据相同的coordinates数组?

我的应用程序配置了expressJS并使用body-parser。要解决此问题还需要其他设置吗?

app.use(bodyParser.urlencoded({ limit: '50mb' }));
app.use(bodyParser.json({ limit: '50mb' }));

谢谢。

3 个答案:

答案 0 :(得分:0)

首先,从@bumblebeen开始,HTTP将所有内容都理解为字符串,并将所有内容都转换为字符串。您可以使用Number.parseInt

来解析它

它也无关紧要,但是express现在附带了它自己的身体解析器,您可以使用它。因此,您无需致电bodyParser.json,只需致电express.json

编辑

按照说明,您可以拥有一个名为parseCoordinates的函数

function parseCoordinates(coordinates) {
     return coordinates.map(inner => {
         return Array.isArray(inner) ? inner.map(elem => parseFloat(elem)) : parseFloat(inner);
     });
}

答案 1 :(得分:0)

{"geoJSON":{"type":"Feature","geometry":{"type":"LineString","coordinates":[[-102.038635,36.800488],[-94.567716,36.800488],[-96.149793,43.381098],[-104.060178,43.508721]]}}}

上面实际上是一个JavaScript对象。

{"geoJSON":{"type":"Feature","geometry":{"type":"LineString","coordinates":[["-102.038635","36.800488"],["-94.567716","36.800488"],["-96.149793","43.381098"],["-104.060178","43.508721"]]}}}

上面实际上是一个JSON。

作为建议的答案之一,每当您将数据发送到服务器时,有效负载中的所有内容都会自动转换为字符串。您应该将值转换为数字。

此外,我认为任何解析都无法做到,您应该为此编写自己的代码。我之所以这样说,是因为解析器永远不会知道原始值是客户端发送的字符串还是实际上是数字,因为所有键和值都将变成字符串。

答案 2 :(得分:0)

假设我有

var payload = {"geoJSON":{"type":"Feature","geometry":{"type":"LineString","coordinates":[[-102.038635,36.800488],[-94.567716,36.800488],[-96.149793,43.381098],[-104.060178,43.508721]]}}}

在发送服务器之前,使用JSON.stringify(payload)对其进行字符串化。

payload = JSON.stringify(payload)
// after this code then sending payload to server

在使用JSON.parse(payload)的服务器中使用此

// server nodejs
var receivedContent = JSON.parse(payload)
// then you can using receivedContent with format you want