2017-02-19 96 views
2

我無法通過nodeJS將curl轉換爲等效的http請求。我正在使用Request模塊,但在提出請求時,我似乎做錯了什麼。當我運行它,它給我簡單的NodeJS http請求等效於curl

body: Cannot POST /path 

不知道如何調試這個,任何想法?

var data = JSON.stringify({ 
    'sender': { 
    'name': 'name', 
    'handle': 'handle' 
    }, 
    'subject': 'Title here', 
    'body': 'something something', 
    'metadata': {} 
}); 

var options = { 
    host: 'website.com', 
    path: '/path', 
    method: 'POST', 
    headers: { 
     'Content-Type': 'application/json', 
     'Authorization': 'Bearer <token>', 
     'Accept': 'application/json', 
     'Content-Length': Buffer.byteLength(data) 
    } 
}; 

var req = http.request(options, function(res) { 
    res.setEncoding('utf8'); 
    res.on('data', function (chunk) { 
     console.log("body: " + chunk); 
    }); 
}); 
req.write(data); 
req.end(); 

下面是我試圖爲上述nodejs做等效curl(那工作)。

curl --include \ 
    --request POST \ 
    --header "Content-Type: application/json" \ 
    --header "Authorization: Bearer <token>" \ 
    --header "Accept: application/json" \ 
    --data-binary "{ 
    \"sender\": { 
     \"name\": \"name\", 
     \"handle\": \"handle\" 
    }, 
    \"subject\": \"Title here\", 
    \"body\": \"something something\", 
    \"metadata\": {} 
    }" \ 
    'website.com/path" 

回答

1

可以包括直接在您的JSON數據與json參數與request庫:

var request = require('request'); 

var options = { 
    uri: 'http://website.com/path', 
    method: 'POST', 
    headers: { 
     'Authorization': 'Bearer <token>', 
     'Accept': 'application/json' 
    }, 
    json: { 
     'sender': { 
      'name': 'name', 
      'handle': 'handle' 
     }, 
     'subject': 'Title here', 
     'body': 'something something', 
     'metadata': {} 
    } 
}; 

var req = request(options, function(error, response, body) { 

    if (error) { 
     console.log(error); 
     return; 
    } 
    if (response.statusCode == 200) { 
     console.log(body); 
    } else { 
     console.log("receive status code : " + response.statusCode); 
    } 
}); 

request options doc

JSON - 將身體的價值JSON表示,並增加了 內容-type:application/json頭。此外,還將 響應正文解析爲JSON。

+0

謝謝!我無法理解文檔並查找示例,但這似乎澄清了它。我認爲在定義請求後必須發送數據 – iddles

+0

很高興幫助您,如果它對您有好處,您可以接受答案 –