2017-04-10 186 views
0

我試圖使用信息應張貼有請求的對象 - >請求POST修改對象?

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); 
    }); 
} 

回答

1

我假設你使用節點模塊請求。 你必須使用json選項而不是表單選項。 將json設置爲true,並將您的數據放在身體中而不是形式。

body - body body用於PATCH,POST和PUT請求。必須是一個Buffer,String或ReadStream。如果json爲true,則body必須是JSON序列化的對象。

表單 - 當傳遞一個對象或查詢字符串時,它將主體設置爲值的查詢字符串表示形式,並添加Content-type:application/x-www-form-urlencoded標頭。當傳遞任何選項時,返回一個FormData實例(並通過管道請求)。請參閱上面的「表單」部分。

https://github.com/request/request#requestoptions-callback

輸出,您在您的文章收錄,是在application/x-www-form-urlencoded格式據我記得PHP等純服務器端語言比較喜歡這種形式。

+0

謝謝你們。這是正確的:)我不得不使用「json:true」和「body:data」 –