koa中间件开发和使用

注:原文地址在我的博客issue里https://github.com/ChenShenhai/blog/issues/15

  • koa v1和v2中使用到的中间件的开发和使用
  • generator 中间件开发在koa v1和v2中使用
  • async await 中间件开发和只能在koa v2中使用

generator中间件开发

generator中间件开发

generator中间件返回的应该是function * () 函数

  1. /* ./middleware/logger-generator.js */
  2. function log( ctx ) {
  3. console.log( ctx.method, ctx.header.host + ctx.url )
  4. }
  5. module.exports = function () {
  6. return function * ( next ) {
  7. // 执行中间件的操作
  8. log( this )
  9. if ( next ) {
  10. yield next
  11. }
  12. }
  13. }

generator中间件在koa@1中的使用

generator 中间件在koa v1中可以直接use使用

  1. const koa = require('koa') // koa v1
  2. const loggerGenerator = require('./middleware/logger-generator')
  3. const app = koa()
  4. app.use(loggerGenerator())
  5. app.use(function *( ) {
  6. this.body = 'hello world!'
  7. })
  8. app.listen(3000)
  9. console.log('the server is starting at port 3000')

generator中间件在koa@2中的使用

generator 中间件在koa v2中需要用koa-convert封装一下才能使用

  1. const Koa = require('koa') // koa v2
  2. const convert = require('koa-convert')
  3. const loggerGenerator = require('./middleware/logger-generator')
  4. const app = new Koa()
  5. app.use(convert(loggerGenerator()))
  6. app.use(( ctx ) => {
  7. ctx.body = 'hello world!'
  8. })
  9. app.listen(3000)
  10. console.log('the server is starting at port 3000')

async中间件开发

async 中间件开发

  1. /* ./middleware/logger-async.js */
  2. function log( ctx ) {
  3. console.log( ctx.method, ctx.header.host + ctx.url )
  4. }
  5. module.exports = function () {
  6. return async function ( ctx, next ) {
  7. log(ctx);
  8. await next()
  9. }
  10. }

async 中间件在koa@2中使用

async 中间件只能在 koa v2中使用

  1. const Koa = require('koa') // koa v2
  2. const loggerAsync = require('./middleware/logger-async')
  3. const app = new Koa()
  4. app.use(loggerAsync())
  5. app.use(( ctx ) => {
  6. ctx.body = 'hello world!'
  7. })
  8. app.listen(3000)
  9. console.log('the server is starting at port 3000')