generated at
koa
v1ではgenerator、v2ではasync-awaitを登録する
v1時代は使ったことないのでよくわからない
v2から使い始めたshokai
nodeにasync-awaitが実装されるまで永遠に正式リリースされない
現状の動作環境はbabel+preset-stage-0のみ

インストール
% npm install koa@next -save
middlewareも基本的に@nextを付けてインストールする

v1とv2でmiddlewareの書き方が変わった
generatorではなくpromiseで返せば作れる
koa-convertを使えば変換できるが、convertしてるので遅い&ちょっと変な書き方になる場合がある
convertしないで使えるほうが良さそう?
koa-staticとかはconvert通して使ってる、他に良いの無いし

koa v2用のミドルウェアのリスト
ロガー
v2用router
router同士の多段マウントもできる
アメリカにルート66という有名な幹線道路があるらしい
convertなしで普通にv2で動くjade render
koa-viewsがv2だと気持ち悪いAPIなのでこっちに落ち着く
jadeの代わりにも使える
というかclientでReact使うならサーバーも最初からコレ使うべきだった
clientのReact componentがそのまま埋め込める
main.jsx
import React from "react"; export default function IndexHTML({user, app}){ const script = `window.user = ${JSON.stringify(user)}; window.app = ${JSON.stringify(app)};`; return ( <html> <head> <title>{app.name}</title> <link rel="stylesheet" href="/highlight.css" /> <script dangerouslySetInnerHTML={{__html: script}} /> </head> <body> <div id="app" /> <script src="/dist/index.js" /> </body> </html> ); }
よくわからない時
git cloneしてきてv2.x branchの中をgrepするとわかる
ハマったところ
app.useの中のerrorが全部握りつぶされるのでtry catchちゃんとしないと何が悪いのかわからない
変なPromiseライブラリを使うと相性で死ぬ?
memcache-promiseを使った
ctxを何か触ると "Can't set headers after they are sent" が起こる
自分でmemcachedをpromiseでラップしたやつ作ったら解決した
koa-serve-staticバグってる
存在しないファイルにアクセスするとsocketはりっぱなしになる