이번에 새로 작업하고 있는 Authentication 서버를 만들기 위해서 Koa를 한 번 써보려고 하는데 Restify에서는 이미 Object에서 모든 Route를 추출하는 소스를 짜 두었지만 Koa의 경우에는 스펙이 약간 다르더군요. 사실은 거의 똑같습니다만 조금 더 좋게 만들어둔 소스코드입니다. 왜냐하면 이전에는 POST로 API 콜을 받을 일이 거의 없었기 때문...이긴 한데.
사실 이렇게 해서 나쁠 것은 없지만 가끔가다가 이상한 모듈이 섞여 있는 것을 조심해야 한다고 생각합니다. (한 번 당한 적이 있어서...)
그래도 직접 지정해주는 것보다는 몇 배 더 편하다고 생각하지만요.
const log = require('./log')
const autofill = (router, routes, prefix) => {
prefix = prefix || ''
if (typeof routes === 'object') {
if (typeof routes.fn === 'function') {
log(`Autofilled route for ${routes.method.toUpperCase()}:${prefix}.`)
router[routes.method](prefix, routes.fn)
} else {
const sub = Object.keys(routes)
for (let k = 0; k < sub.length; k++) {
autofill(router, routes[sub[k]], prefix + '/' + sub[k])
}
}
}
}
module.exports = autofill
> https://github.com/Seia-Soto/authenPoint/blob/master/structures/routing/autofill.js
에서 추출했습니당.
Koa-router와 핸들러 전체를 Object (아래와 같은 형식으로)로 제공하면 됩니다.
{
test: { // /test
a: { // /test/a 로 라우팅
method: 'get',
fn: async ctx => ctx.body = 'hello world'
}
}
}