Webフレームワーク調査 Koa編 #207
Webフレームワーク調査 Koa編
この記事の続きです。
なかなか時間が作れずこんなにおそくなってしまいました。
前回GitHubのREADME.mdを読んでワカンネとか言ってたんですが、公式サイトの方がExampleとかもガンガン載っててわかりやすいような印象を受けました。
Koa - next generation web framework for node.js
前回、context
オブジェクトなんぞやというところがもやっとしたまま終わっていましたが、これは一つのリクエストにつき一つ作成されるオブジェクトで、そのリクエストとレスポンスを一つにまとめた物ということらしいです。
context
オブジェクトはres
とreq
というオブジェクトを持っていて、これはNodeの標準モジュールのrequest
、response
そのものなので、ほとんどのNode標準で実装されているメソッドを叩けるそう。
ただ、context
オブジェクトにはたくさんの便利なメソッドがKoaによって実装されているので、基本的にはそちらを使ってゴリゴリ開発していくことになりそう。
公式のContextのところを読むといいと思う。超スゴイ、超イケイケ。
まぁ個人的には、よく使うメソッドのエイリアスが張られているのはちょっと気持ち悪いというか、別にそこまでしなくてもとは思いますが…。
あと、前回Async/Awaitだとなにが嬉しいねん、みたいな感じになってましたがこれも解決。
公式サイトの例にあるこれがわかりやすい。
const Koa = require('koa'); const app = new Koa(); // x-response-time app.use(async (ctx, next) => { const start = Date.now(); await next(); const ms = Date.now() - start; ctx.set('X-Response-Time', `${ms}ms`); }); // logger app.use(async (ctx, next) => { const start = Date.now(); await next(); const ms = Date.now() - start; console.log(`${ctx.method} ${ctx.url} - ${ms}`); }); // response app.use(async ctx => { ctx.body = 'Hello World'; }); app.listen(3000);
X-Response-Timeのmiddlewareが呼び出されて、start変数に現在時刻が入って、next()
が呼ばれるので次のmiddlewareに遷移して、loggerでも同じ感じで遷移して最後Hello Worldをレスポンスとして返したら、const ms = ...
の行以降が呼ばれるみたいな感じでしょうか?
いろいろ自由に制御できるのがたのしそう。
雑談
GoogleHomeとAlexaで面白いことしたので見てほしい
やる気のないGoogleHome完成したから見て pic.twitter.com/721PUkDkVH
— ううたろ (@uutarou10) 2017年12月8日
IFTTTで「音楽聞かせて」のレスポンスを「Alexa、音楽聴かせて」に変更してるだけです。面白い…w