koa比express香的多

182 阅读1分钟

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

  // 解决异步问题
  // res.json(req.message)
}

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.