koa

(2016/04/26〜2016/06/25)
  • Node.jsWAF
  • v1ではgenerator、v2ではasync-awaitを登録する
  • v1時代は使ったことないのでよくわからない
  • v2から使い始めた
  • v2のissue

  • 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用のミドルウェアのリスト

  • wikiにリストがある
  • koa-logger@next
  • ロガー
  • koa-66
  • v2用router
  • router同士の多段マウントもできる
  • アメリカにルート66という有名な幹線道路があるらしい
  • koa-jade
  • convertなしで普通にv2で動くjade render
  • koa-viewsがv2だと気持ち悪いAPIなのでこっちに落ち着く
  • react-view
  • Reactサーバーサイドレンダリングする
  • 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はりっぱなしになる