Javascript 如何使用nodejs在服务器上接收与客户端post数据格式相同的post数据?
我有以下格式的帖子数据Javascript 如何使用nodejs在服务器上接收与客户端post数据格式相同的post数据?,javascript,node.js,express,body-parser,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","c
{"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"]]}}}
服务器上需要相同的格式,但收到的格式如下
{"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"]]}}}
您可以在坐标
属性中看到差异。将双引号添加到服务器接收的坐标数组中的每个值。如何获得与客户端post数据相同的坐标数组
我的应用程序配置了expressJS并使用了body解析器。修复此问题所需的任何其他设置
app.use(bodyParser.urlencoded({ limit: '50mb' }));
app.use(bodyParser.json({ limit: '50mb' }));
提前感谢。首先,从中,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);
});
}
首先,从中,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);
});
}
上述内容实际上是一个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
正如其中一个答案所建议的,无论何时向服务器发送数据,负载中的所有内容都将自动转换为字符串。您应该将值强制转换为数字
另外,我不认为任何解析都能做到这一点,您应该为此编写自己的代码。我之所以这么说是因为,解析器永远不会知道原始值是客户端发送的字符串,还是实际上是一个数字,因为所有键和值都将变成字符串
上述内容实际上是一个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
正如其中一个答案所建议的,无论何时向服务器发送数据,负载中的所有内容都将自动转换为字符串。您应该将值强制转换为数字
另外,我不认为任何解析都能做到这一点,您应该为此编写自己的代码。我之所以这么说是因为,解析器永远不会知道原始值是客户端发送的字符串还是实际上是一个数字,因为所有键和值都将变成字符串。
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 = JSON.stringify(payload)
// after this code then sending payload to server
在服务器中使用JSON.parse(有效负载)来使用
// server nodejs
var receivedContent = JSON.parse(payload)
// then you can using receivedContent with format you want
我有
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 = JSON.stringify(payload)
// after this code then sending payload to server
在服务器中使用JSON.parse(有效负载)来使用
// server nodejs
var receivedContent = JSON.parse(payload)
// then you can using receivedContent with format you want
我们需要更多的背景。您的对象看起来确实像有效的JSON,所以这不是问题所在。如果您以所描述的POST格式发送数据,则不会出现问题。(可能您的客户端代码正在以URL编码的格式对数据进行编码,但您已经指出了其他情况)。我们需要更多的上下文。您的对象看起来确实像有效的JSON,所以这不是问题所在。如果您以所描述的POST格式发送数据,则不会出现问题。(可能您的客户端代码正在以URL编码的格式对该数据进行编码,但您已经指出了其他方式)。这里的坐标属性是一个多维数组。你能给出一个简单的方法来解析那些与客户端post数据相同的值吗?这些值不是整数。你只需要从Number.parseInt
更改为Number.parseFloat
这里坐标属性是一个多维数组。你能给出一个简单的方法来解析那些与客户端post数据相同的值吗?这些值不是整数。你只需要将Number.parseInt
更改为Number.parseFloat