koa
http://koajs.com/ https://gyazo.com/8b05f9047581746f49943b8908342668.png
v1時代は使ったことないのでよくわからない
v2から使い始めたshokai.icon
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がそのまま埋め込める
code: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するとわかる
例
https://gyazo.com/b0c9f5715f1ab2df14a688bf027b50b5.png
ハマったところ
app.useの中のerrorが全部握りつぶされるのでtry catchちゃんとしないと何が悪いのかわからない
ctxを何か触ると "Can't set headers after they are sent" が起こる
自分でmemcachedをpromiseでラップしたやつ作ったら解決した
存在しないファイルにアクセスするとsocketはりっぱなしになる