世の中にはkoa.js
などといふものありけり。このkoa.js
とかいうの、噂によるとjavascriptで動くミドルウェアらしい。ミドルウェアって何やねん。調べたところ、その名の通り「フロントとサーバの間で働く機構」らしい。たぶん、フロントの入力やら何やらをサーバ側に渡したり、逆にサーバの出力をフロントに返す橋渡し的なのをしているんだと思う。
koa.js
はこのミドルウェアを複数層重ね合わせることで色々とできるよう。
ミドルウェアの登録
app.use
を使うと、非同期関数として処理を登録できる。で、このapp.use
なんだが次のコードを見て欲しい。
app.use(async (ctx, next) => { console.log('this is read first'); await next(); console.log('this is read third'); }); app.use(async (ctx, next) => { console.log('this is read second'); });
とまあこんな感じで、app.use
でミドルウェアをいっぱい登録できる。で、関数のなkでawait next();
が呼ばれると次に登録されたミドルウェアに処理が移り、処理が終わった時点で元のミドルウェアに戻るようだ。だから、これを実行すると次のような出力が出る。
this is read first this is read second this is read third
こんな感じでスタックぽい動きをしてる。最初に実装した時、なぜか分からないが全ての処理が2回繰り返されたりしており、かなり謎味が深かったがnodeを再起動したら直った。再現性などというものはありませんよワライ。
データのやり取り
ミドルウェアなのでフロントとサーバ間でデータをやりとするわけなんですけども、これはctx
というオブジェクトに入れて行う。このオブジェクトは全てのミドルウェア間で共有されているため、ミドルウェア間での受け渡しが可能になっている。
app.context.property = hogehoge
みたいな感じで、新しいpropertyをはやしたりもできる。
router
koa-router
を入れる必要がある。
import * as Koa from 'koa'; import * as Router from 'koa-router'; const app = new Koa(); const router = new Router(); router.get('/users/:id', function (ctx, next) { ctx.body = ctx.params['id']; }); app.use(router.routes()); app.use(router.allowedMethods()); app.listen(3000);
みたいな感じで書くといい感じにrouteingしてくれる。
というかこれを書いててroutingとはなんぞやと思った。
まとめ
簡単にチュートリアルをやるだけだとあまり嬉しさが分からな買った。やっぱり実際に何かを作らないとダメっぽよ。