我尝试使用像这样的帖子发布对象 - >
function postData(data, cb) {
request.post({
url: 'http://localhost:3001/datastream',
form: data,
}, (err, httpResponse, body) => {
cb(body);
});
}
对象看起来像这样:
{
"tblPartsReport": {
"valid": true,
"message": "Execute SQL: SELECT * FROM tblPartsReport WHERE ID = (SELECT MAX(ID) FROM tblPartsReport); success !",
"records": [{
"ResourceID": 61,
"TimeStamp": "2017-04-04T05:52:19Z",
"PNo": 0,
"ErrorID": 0,
"ID": 10174
}]
},
"tblMachineReport": {
"valid": true,
"message": "Execute SQL: SELECT * FROM tblMachineReport WHERE ID = (SELECT MAX(ID) FROM tblMachineReport); success !",
"records": [{
"ResourceID": 61,
"TimeStamp": "2017-04-04T05:52:19Z",
"AutomaticMode": true,
"ManualMode": false,
"Busy": false,
"Reset": false,
"ErrorL0": false,
"ErrorL1": false,
"ErrorL2": false,
"ID": 26562
}]
}
}
该对象有效且没问题,但在发布后,它在另一面看起来像这样:
console.log(req.body);
{
'tblMachineReport[valid]': 'true',
'tblMachineReport[message]': 'Execute SQL: SELECT * FROM tblMachineReport WHERE ID = (SELECT MAX(ID) FROM tblMachineReport); success !',
'tblMachineReport[records][0][ResourceID]': '61',
'tblMachineReport[records][0][TimeStamp]': '2017-04-04T05:52:19Z',
'tblMachineReport[records][0][AutomaticMode]': 'true',
'tblMachineReport[records][0][ManualMode]': 'false',
'tblMachineReport[records][0][Busy]': 'false',
'tblMachineReport[records][0][Reset]': 'false',
'tblMachineReport[records][0][ErrorL0]': 'false',
'tblMachineReport[records][0][ErrorL1]': 'false',
'tblMachineReport[records][0][ErrorL2]': 'false',
'tblMachineReport[records][0][ID]': '26562',
'tblPartsReport[valid]': 'true',
'tblPartsReport[message]': 'Execute SQL: SELECT * FROM tblPartsReport WHERE ID = (SELECT MAX(ID) FROM tblPartsReport); success !',
'tblPartsReport[records][0][ResourceID]': '61',
'tblPartsReport[records][0][TimeStamp]': '2017-04-04T05:52:19Z',
'tblPartsReport[records][0][PNo]': '0',
'tblPartsReport[records][0][ErrorID]': '0',
'tblPartsReport[records][0][ID]': '10174'
}
知道为什么会这样吗?我也尝试过Axios,但无法使帖子正常工作。我只是想发布一个常规对象。通常我一直在使用jQuery AJAX。
编辑: 这是正确的方法:)
function postData(data, cb) {
request.post({
url: 'http://localhost:3001/datastream',
json: true,
body: data,
}, (err, httpResponse, body) => {
cb(body);
});
}
答案 0 :(得分:1)
我假设您使用节点模块请求。 您必须使用json选项而不是表单选项。 将json设置为true并将数据放入正文而不是表单。
body - 用于PATCH,POST和PUT请求的实体主体。必须是Buffer,String或ReadStream。如果json为true,则body必须是JSON可序列化的对象。
form - 当传递一个对象或一个查询字符串时,它将body设置为值的查询字符串表示,并添加Content-type:application / x-www-form-urlencoded标头。如果没有传递选项,则返回一个FormData实例(并通过管道传递请求)。请参阅"表格"以上部分。
https://github.com/request/request#requestoptions-callback
您在帖子中包含的输出格式为application/x-www-form-urlencoded
,据我记得PHP和其他纯服务器端语言更喜欢这种格式。