便利グッズ
これは何か?
@nyarla/http-simulator
は、 node.js で HTTP Server を起動せず に、 Web Application (express 等) への HTTP アクセスの再現をする ために作られたモジュールです。
このモジュールを作った理由
僕は最近、
へデプロイする前提で何かを作り始める事が多いのですが、その際に使用する 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
を組み立てる
という部分のコードを切り出して、モジュールとしての体裁を整えて、と言う事を行なったのが、
になります。
使い方
基本的な使い方は、
- README.md の SYNOPSIS
に、一応は全部書いたので、詳しい内容はそちらを見た方が早いと思いますが、 大体の使い方のイメージは下記の様な感じです:
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 を再現したい、みたいな、限られた用途でなら、れなりに使えるのではないか、と思ってます。
という事で本日の朝っぱらからの記事は以上です。はい。