express中内置了一系列的插件比如路由,静态资源访问,解析application/json格式数据等
koa需要自己去安装插件来实现比如:
实现路由分发:koa-router
或者 @dva/router
暴露静态资源:
koa-static
解析application/json格式请求: koa-bodyparser
总结koa是轻量级的express
在代码执行层面
koa支持异步的层级next嵌套而express异步的话容易出现回调地狱,
及koa在多层级的异步方法中更容易控制
以下是一段对比代码:
express
import express from 'express'
var app = express()
let mockInfo = async ()=>{
return new Promise((resolve, reject)=>{
setTimeout(() => {
resolve('return data')
}, 2000);
})
}
app.use(async (req,res,next)=>{
console.log('--->1');
await next()
console.log('--->3');
})
app.use(async (req,res,next)=>{
console.log('--->2');
let data = await mockInfo()
next()
console.log('--->4');
})
app.listen('7778')
输出结果
--->1
--->2
--->3
--->4
koa
import Koa from 'koa'
var app = new Koa()
let mockInfo = async ()=>{
return new Promise((resolve, reject)=>{
setTimeout(() => {
resolve('return data')
}, 2000);
})
}
app.use(async (context,next)=>{
console.log('--->1');
await next()
console.log('--->3');
})
app.use(async (context,next)=>{
console.log('--->2');
let data = await mockInfo()
next()
console.log('--->4');
})
app.listen('7778')
输出结果
--->1
--->2
--->4
--->3