今 routes ではルーティング設定として各ルートの設定の配列だけをオプションで受け取るけど オブジェクトを受け取ってその一つの routes プロパティで今の配列にしたほうがいいかなって思う
そこで routes プロパティ以外に何を設定できるのか だけど ルーティングってサーバのメインみたいなものでその他ミドルウェアはそこでの処理をするためのおまけの前処理みたいな感じがするし サーバ設定や前段ミドルウェアをそこに書いてしまえば Koa 自体のインスタンス作ったり app.use したりという手間もなくなりそう
ルーティングだけじゃなくて Koa 自体のラッパーにする感じ
使い方はこんなイメージ
const koaServer = require("./path/to/koa-sever.js")
const static = require("koa-static")
const koaBody = require("koa-body")
koaServer({
server: {
keys: ["koakey"],
},
context: {
data: { x: 10 },
},
pre: [
static("."),
koaBody(),
],
routes: [
{
path: "/",
method: "GET",
handler(ctx) {
ctx.body = "ok"
},
},
],
})(8000)
server に app のプロパティ設定で context に app.context の設定
pre がミドルウェアで routes がルーティングの設定
これだけで困らない気がする
思いつくのであるとしたら https/http2 くらいだけど最後の関数呼び出しを http2 みたいなメソッド呼び出しでできるようにすれば十分そうだけど基本 http でいいし
作ってみるとすごく短く書けて感じこうなった(動作確認はしてない)
const Koa = require("koa")
const compose = require("koa-compose")
const routes = require("./path/to/routes.js")
export default options => {
options = options || {}
const app = new Koa()
Object.assign(app.context, options.context)
Object.assign(app, options.server)
app.use(compose([...options.pre, routes(options.routes)]))
const start = (...a) => app.listen(...a)
start.app = app
return start
}