例えば、以下のREST APIに、以下のようなリクエストボディを付けてリクエストを投げるとします。
[DELETE] http://httpbin.org/delete ・リクエストボディ:{"param" : "hello"}
以下のサンプルソースのような記述でリクエストを送ったところ、リクエストボディの内容がAPIに届く時点で空になってしまいます。
javascript
1 2// expressで作るサンプルAPIです 3router.delete('/', (req, res, next) => { 4 const http = require('http'); 5 const async = require('async'); 6 7 let options = { 8 host : 'httpbin.org', 9 port : 80, 10 path : '/delete', 11 method : 'DELETE', 12 headers : {"Content-Type" : "application/json"} 13 }; 14 15 // let options = { 16 // host : 'httpbin.org', 17 // port : 80, 18 // path : '/put', 19 // method : 'PUT', 20 // headers : '' 21 // }; 22 23 let payload = JSON.stringify({"param" : "hello"}); 24 25 let req2; 26 27 async.waterfall([ 28 function(callback) { 29 req2 = http.request(options, (res2) => { 30 let body = ''; 31 res2.on('data', (chunk) => { 32 body += chunk; 33 }); 34 res2.on('end', () => { 35 callback(null, body); 36 }); 37 }); 38 req2.write(payload); // リクエストボディをセット 39 req2.end(); 40 }, 41 function(body,callback) { 42 res.send(body); // リクエスト送信 43 callback(null, body); 44 } 45 ], 46 (e, result) => { 47 if(e) { 48 next(e); 49 return; 50 } 51 }); 52});
レスポンスは以下になります。
dataの値にリクエストボディが入るはずですが、空になります。
{ "args": {}, "data": "", "files": {}, "form": {}, "headers": { "Content-Type": "application/json", "Host": "httpbin.org" }, "json": null, "origin": "123.456.789.0", "url": "http://httpbin.org/delete" }
これを、例えばPUTメソッドのリクエストに変えてみると、問題なくdataの値にリクエストボディが入ります。
なぜ、このような現象が起きるのか分かりません。
(DELETEメソッドの仕様?node.jsのバグ?)
御存知の方がいましたら、教えていただけないでしょうか。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/13 11:52