Koa2
不涉及路由以及其他中间件的捆绑,体积比Express
小;Koa2
使用 async
函数 ,Express
使用 Promise
回调 ,因此Koa2
可以避免回调,而且可以使用try catch
更方便地去处理错误异常;Koa2
使用 洋葱圈模式 ,其核心实现思想是使用函数调用栈,先调用的后执行,直到里层函数一层一层由里向外执行完Express
核心思想是使用任务队列,先进队列的先取出执行,后面的任务进队等待,直到前面的任务都执行完后再执行使用Express
:
router.post('/update', function (req, res, next) {
const id = req.query.id;
const data = req.body;
const result = updateArticle(id, data);
return result.then(val => {
if (val) {
res.json(new SuccessModel());
} else {
res.json(ErrorModel("更新文章失败"));
}
}).catch(e => {
console.error(e);
}).then(() => { /** 其他动作 */ })
.then(() => {
//...
})
});
使用Koa2
:
router.post('/update', loginCheck, async function (ctx, next) {
const id = ctx.query.id;
const data = ctx.request.body;
try {
const result = await updateArticle(id, data);
if (result) {
ctx.body = new SuccessModel();
/** 其他动作 */
} else {
ctx.body = new ErrorModel("更新文章失败");
}
} catch (e) {
console.error(e);
}
})
可以看出:
Express
通过Promise
的resolve
的回调,获取resolve得到的结果;而Koa2
通过await
一个async
函数,使用同步的写法实现异步的效果,写法更清晰。Express
对于每个callback
都要做错误捕捉,然后一层一层向外传递;而Koa2
可以使用一个try catch
就可以实现所有错误的捕捉。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。