koa比express香的多
使用express和koa处理同步数据时是一样的
const express = require('express')
const app = express()
const middleware1 = (req, res, next) => {
req.message = 'aaa'
next()
res.json(req.message)
}
const middleware2 = (req, res, next) => {
req.message += 'bbb'
next()
}
const middleware3 = (req, res, next) => {
req.message += 'ccc'
}
app.use(middleware1, middleware2, middleware3)
app.listen(8000, () => {
console.log('express 服务器~');
})
处理异步数据,koa yyds
先看express小案例
const express = require('express')
const axios = require('axios')
const app = express()
const middleware1 = (req, res, next) => {
req.message = 'aaa'
next()
res.json(req.message)
}
const middleware2 = (req, res, next) => {
req.message += 'bbb'
next()
}
const middleware3 = async (req, res, next) => {
const result = await axios.get('http://123.207.32.32:9001/lyric?id=167876')
req.message += result.data.lrc.lyric
}
app.use(middleware1, middleware2, middleware3)
app.listen(8000, () => {
console.log('express 服务器~');
})
koa小案例
const Koa = require('koa')
const axios = require('axios')
const app = new Koa()
const middleware1 = async (ctx, next) => {
ctx.message = 'aaa'
await next()
ctx.body = ctx.message
}
const middleware2 = async (ctx, next) => {
ctx.message += 'bbb'
await next()
}
const middleware3 = async (ctx, next) => {
const result = await axios.get('http://123.207.32.32:9001/lyric?id=167876')
ctx.message += result.data.lrc.lyric
}
app.use(middleware1)
app.use(middleware2)
app.use(middleware3)
app.listen(8000, () => {
console.log('koa 服务器~');
})
对比之后的总结
使用koa框架可以使用 async await 对异步数据进行控制,灵活了不少.
express框架处理异步数据看起来笨拙了很多.
源码: koa中间件执行过程使用dispatch函数实现,执行next函数(相当于执行dispatch)返回promise(解决异步数据问题).而express源码中执行next函数没有返回promise,是一个同步函数.所以在开发中,推荐使用koa.