ゆるふわ技術日誌

エンジニア見習いの悪戦苦闘日記

Webフレームワーク調査 Koa編 #207

Webフレームワーク調査 Koa編

yurufuwa-tech.hatenablog.com

この記事の続きです。

なかなか時間が作れずこんなにおそくなってしまいました。

前回GitHubのREADME.mdを読んでワカンネとか言ってたんですが、公式サイトの方がExampleとかもガンガン載っててわかりやすいような印象を受けました。

Koa - next generation web framework for node.js

前回、contextオブジェクトなんぞやというところがもやっとしたまま終わっていましたが、これは一つのリクエストにつき一つ作成されるオブジェクトで、そのリクエストとレスポンスを一つにまとめた物ということらしいです。

contextオブジェクトはresreqというオブジェクトを持っていて、これはNodeの標準モジュールのrequestresponseそのものなので、ほとんどの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で面白いことしたので見てほしい

IFTTTで「音楽聞かせて」のレスポンスを「Alexa、音楽聴かせて」に変更してるだけです。面白い…w