最近练手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());
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。