便利グッズ
これは何か?
@nyarla/http-simulator
は、 node.js で HTTP Server を起動せず に、 Web Application (express 等) への HTTP アクセスの再現をする ために作られたモジュールです。
このモジュールを作った理由
僕は最近、
- [[AWS Lambda]] + [[Amazon API Gateway]]
へデプロイする前提で何かを作り始める事が多いのですが、その際に使用する [[AWS Lambda]] + Amazon API Gateway での開発の足回りに、
と言うフレームワークを使っています。
それでこの aglex
と言うフレームワークは、ローカルでの開発に、
を使えて、かつ、AWS Lambda + AWS API Gateway へのデプロイの面倒も見てくれる、という、薄いラッパーみたいなフレームワークで、自分にとっては、ようやくながら見つける事が出来た、自分に対して大変に性に合うフレームワークなのですが、使う上でまったく無問題か、と言うとそうでも無くて、
[[Amazon API Gateway]] から [[AWS Lambda]] で受け取った JSON を node.js の http.IncomingMessage
に変換する部分が弱い
という欠点が有ったりします。
が、もっともこの欠点は、デフォルトで生成されるテンプレコードに起因する問題であり、それ以上のことは自分で補ってやれば問題ない、という感じだったので、 [[AWS Lambda]] + [[AmazonAPI Gateway]] で何かを作り始める際には、その辺りの、
- [[Amazon API Gateway]] から [[JSON]] を受けとって HTTP Request を組み立てる
というコードを書いていました。
が、しかしながら、しばらくこの辺りを書いていて、 [[AWS Lambda]] + [[Amazon API Gateway]] を書くたびに、 この辺りのコードを書くのは流石に面倒になってきて、かつ
あ、なんかこれモジュールとして切り出せば便利なんじゃね?
とか思ったので、とりあえず、
- プレーンな Javascript Object から
http.IncomingMessage
と http.ServerResponse
を組み立てる
という部分のコードを切り出して、モジュールとしての体裁を整えて、と言う事を行なったのが、
になります。
使い方
基本的な使い方は、
に、一応は全部書いたので、詳しい内容はそちらを見た方が早いと思いますが、 大体の使い方のイメージは下記の様な感じです:
const express = require('express');
const http = require('@nyarla/http-simulator');
const app = express();
[[...]]
const done = function (err, ret) { [[...]] }
const fn = http.createSimulator(app);
fn({ method: 'GET' }, done);
それで、このモジュールでは、特に使い方の注意点とかは無いんですが、もし細かい挙動で不明な点が有れば、
で、実際のコード (index.js
) や テスト (test.js
) を見た方が、実際の挙動とかがつかみ易いのではないか、と思います。
以上
ま、話としては以上ですが、もし上記モジュールについて、何か問題などありましたら、 [[GitHub]] で Issue を立ててもらえれば、対応出来る範囲で対応したい、と考えています。
あとはまあ、このモジュールはどちらかというと node.js の http.IncomingMessage
のモックを作る、と言うよりかは、 node.js の http.IncomingMessage
をそのまま使い、 Web Application への HTTP Request を再現する、という事に主眼を置いたモジュールなので、ユースケースが結構限定されるかとは思うんですが、テスト用途とか、あるいは今回の最初の切っ掛けみたく、 node.js だけどサーバは立てられない [[AWS Lambda]] 内で HTTP Request を再現したい、みたいな、限られた用途でなら、れなりに使えるのではないか、と思ってます。
という事で本日の朝っぱらからの記事は以上です。はい。