koa-router統一介面返回格式

我是好人發表於2021-12-01

最近練手koa,有兩個需求。

  • 介面返回內容保持統一
  • 介面程式碼我不想處理ctx.body,我希望得到結果就return,出現錯誤就throw。

所以就寫了一箇中介軟體,程式碼大概這樣。

const ApiRouter = () => async (ctx, next) => {
    try {
        const data = await next()
        ctx.body = {
            success:true,
            data,
        }
    } catch (error) {
        ctx.body = {
            success:false,
            message:error.message,
        }
    }
}
const api = new Router()
api.use(ApiRouter())
// 路由的定義還是跟原來一樣
// 區別就是,你不需要用到ctx引數了
// 如果一切正常,你直接return
// 如果出現錯誤,你就拋一個錯
api.get('/test', () => {
    if (Math.random() > 0.5) return 'Hello World!'
    else throw new Error('Goodbye World!')
})
// 應用路由
// 建議放到單獨的路徑下面
router.use('/api', api.routes(), api.allowedMethods());

image.png
image.png

相關文章