POSTの例を
Node.js上動くアプリから、POSTリクエストを投げるコードを書くことが最近多いので、パターンをいくつか書き残そうと思いました。モジュールによって変わる使用感やコードの量、デバッグ方法などを比較したかったため、複数の方法を残します。
なお、ここではコードサンプルを残すのみで、特に比較や分析は述べてません。
ここに記録しているコード
下の3つです。すべてTypeScriptに対応しているモジュールです。
- Node.js標準のhttp/httpsモジュールを使った例。
- requestモジュールを使った例.
- gotモジュールを使った例
Nodeの標準に含まれているhttp, httpsモジュールを使った例
Node標準のhttp/httpsモジュール
importjsonDataImportedfrom'./data.json';constACCESS_TOKEN=`<<アクセストークンと置き換えます>>`;constENDPOINT_HOST=`<<エンドポイントホスト名と置き換えます 例) sample.endpoint.com>>`;constENDPOINT_PATH=`<<エンドポイントホスト下のパスと置き換えます 例) /sample/path`;constpostOptions:https.RequestOptions={host:ENDPOINT_HOST,path:ENDPOINT_PATH,method:'POST',headers:{'Content-Type':"application/json;charset=utf-8",Accept:'application/json',Authrorization:ACCESS_TOKEN}};functionpostDataWithAccessToken(options:https.RequestOptions,postData:string):Promise<any>{returnnewPromise((resolve,reject)=>{constreq=https.request(basePostOptions,(res)=>{letqueue:Buffer[]=[];res.on('data',(chunk)=>{queue.push(chunk);});res.on('end',()=>{constdata=Buffer.concat(queue);resolve(data.toString());});});req.on('error',(e)=>{console.log(`request error:${JSON.stringify(e)}`);reject(e);});req.write(postData);req.end();});}(async()=>{try{constresult=awaitpostDataWithAccessToken(postOptions,JSON.stringify(jsonDataImported));console.log(`${JSON.stringify(result)}`);}catch(e){console.log(`ERROR - non-200/202 code returned from the endpoint:\n${JSON.stringify(e)}`);}})();
ポピュラーなrequestモジュールを使った例
よく見つかるのはrequestモジュールを使用するコードかと思います。実際に私も今まではrequestを使ってましたが、最近開発がメンテナンスモードに入ってしまったとのことで、代わりを探さなくてはいけないと思ってました。
requestモジュール
importrequestfrom'request';import_from'lodash';importjsonDataImportedfrom'./data.json';constACCESS_TOKEN=`<<アクセストークンと置き換えます>>`;constENDPOINTT_TO_POST='<<エンドポイント 例)https://sample.com/sample/path >>';constpostOptions:request.Options={uri:ENDPOINTT_TO_POST,method:'POST',headers:{'Content-Type':"application/json;charset=utf-8",Accept:'application/json',Authorization:`Bearer ${ACCESS_TOKEN}`},json:true,body:jsonDataImported};functionpostDataWithAccessToken(options:request.Options):Promise<any>{returnnewPromise((resolve,reject)=>{constreq=request.post(options,(err,res,body)=>{if(err){console.log(`${JSON.stringify(err)}`);}elseif(res.statusCode===200||res.statusCode===202){resolve(res);}else{console.log(`status code was not 200 or 202`);reject(res);}});});}(async()=>{try{constresult=awaitpostDataWithAccessToken(postOptions);console.log(`${JSON.stringify(result)}`);}catch(e){console.log(`ERROR - non-200/202 code returned from the endpoint:\n${JSON.stringify(e)}`);}})();
gotモジュールを使った例
requestモジュールの代わりを選択肢を持っておこうと考えていて、今のところしばらくはgotを使ってみます。今日使ってみた中では、一番簡潔に書けますし、十分通常の用途をカバーするモジュールだと思います。
gotモジュール
importgotfrom'got';importjsonDataImportedfrom'./data.json';constACCESS_TOKEN=`<<アクセストークンと置き換えます>>`;constENDPOINTT_TO_POST='<<エンドポイント 例)https://sample.com/sample/path >>';(async()=>{try{constbody=awaitgot.post(ENDPOINTT_TO_POST,{body:jsonDataImported,json:true,headers:{'Content-Type':"application/json;charset=utf-8",Authorization:`Bearer ${ACCESS_TOKEN}`}});}catch(e){console.log(`ERROR:\n${JSON.stringify(e)}`);}})();
今後
特にgotについてはこれからも使ってみて、便利な使い方など見つけたらアップデートしていこうと思います。