koa
v1時代は使ったことないのでよくわからない
v2から使い始めた
nodeにasync-awaitが実装されるまで永遠に正式リリースされない
現状の動作環境はbabel+preset-stage-0のみ
インストール
% npm install koa@next -save
middlewareも基本的に@nextを付けてインストールする
v1とv2でmiddlewareの書き方が変わった
generatorではなくpromiseで返せば作れる
convertしないで使えるほうが良さそう?
koa v2用のミドルウェアのリスト
ロガー
v2用router
router同士の多段マウントもできる
アメリカにルート66という有名な幹線道路があるらしい
convertなしで普通にv2で動く
jade render
koa-viewsがv2だと気持ち悪いAPIなのでこっちに落ち着く
jadeの代わりにも使える
というかclientでReact使うならサーバーも最初からコレ使うべきだった
clientのReact componentがそのまま埋め込める
main.jsximport 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ちゃんとしないと何が悪いのかわからない
ctxを何か触ると "Can't set headers after they are sent" が起こる
自分でmemcachedをpromiseでラップしたやつ作ったら解決した
存在しないファイルにアクセスするとsocketはりっぱなしになる