美文网首页
koa学习笔记

koa学习笔记

作者: 风间澈618 | 来源:发表于2020-09-23 09:57 被阅读0次

import和export在node中使用
mongodb学习
1 mongoose的学习
2 先运行mongo.exe再运行项目
3 学完node ,再去看看nuxt和ssr
4 只提供封装好http上下文、请求、响应,以及基于async/await的中间件容器。
利用ES7的async/await的来处理传统回调嵌套问题和代替koa@1的generator,但是需要在node.js 7.x的harmony模式下才能支持async/await。
中间件只支持 async/await 封装的,如果要使用koa@1基于generator中间件,需要通过中间件koa-convert封装一下才能使用。
5 pug和ejs等模板渲染

11 function parseQueryStr( queryStr ) {
  let queryData = {}
  let queryStrList = queryStr.split('&') //数组
  console.log( queryStrList )
  //queryStrList.entries() entries() 方法返回一个数组的迭代对象,该对象包含数组的键值对 (key/value)。
  //迭代对象中数组的索引值作为 key, 数组元素作为 value。
  for (  let [ index, queryStr ] of queryStrList.entries()  ) {
    let itemList = queryStr.split('=')
    queryData[ itemList[0] ] = decodeURIComponent(itemList[1])
  }
  return queryData
}

6 Node.js 的基础知识
http 模块的使用
fs 模块使用
path 模块使用
Buffer 类型
7 node.js或许真是js+node API+第三方生态圈 的学习
8 测试框架和express egg
9 import和export
10 上传文件和图片 增删改查 **实现

koa 中间件引擎
中间件原理
中间件在await next()前后操作,像数据结构栈,先进后出
1 有统一context
2 操作先进后出
3 有控制先进后出的机制next
4 有提前结束机制
利用promise可以实现中间件流程,但是可读性和可维护性不好

Promise.resolve(middleware1(context, async() => {
  return Promise.resolve(middleware2(context, async() => {
    return Promise.resolve(middleware3(context, async() => {
      return Promise.resolve();
    }));
  }));
}))
  .then(() => {
    console.log('end');
    console.log('context = ', context);
  });

现在用async/await 实现
主要思路
1每个中间件需要封装一个promise
2 洋葱模型的先进后出操作,对于promise.resolve前后操作

function compose(middleware){
return function(ctx,next){
  let index=-1
  function dispatch(i){
      if(i<index){
          return Promise.reject(new Error('next() called multiple times'))
      }
      index=i;
      let fn=middleware[i]
  if(i===middleware.length){
    fn=next
  }
  if(!fn){
    return Promise.resolve()
  }
  try{
    return Promise.resolve(fn(ctx,()=>{
      return dispath(i+1)
    }))
  }catch(err){
    return Promise.reject(err)
  }
  }
}
}

普通中间件式http服务实现
用原生的node.js实现纯回调的中间件的http服务
服务类封装

  const http=require('http')
  const Emitter=require('events)

  class WebServer extends Emitter{
    constructor(){
      super();
      this.middleware=[]
      this.context=Object.create({})
    }
    //服务事件监听
    listen(..args){
      const server=http.createServer(this.callback())
      return server.listen(...args)
    }
    //注册使用中间件
    use(fn){
      if(typeof fn==='function'){
        this.middleware.push(fn)
      }
    }
    //中间件总回调方法
    callback(){
      let that=this
      if(this.listeners('error).length===0){
        this.on('error',this.onerror)
      }
      const handleRequest=(req,res)=>{
        let context that.createContext(req,res)
        this.middleware.forEach((cb,idx)=>{
          try{
            cb(context)
          }catch(err){
            that.onerror(err)
          }
          if(idx+1>=this.middleware.length){
            if(res&&typeof res.end==='function'){
              res.end()
            }
          }
        })
      }
      return handleRequest
    }
    /*异常处理监听*/
    onerror(err){
      console.log(err)
    }
    /*****创建通用上下文***/
    createContext(req,res){
      let context=Object.create(this.context)
      context.req=req;
      context.res=res
      return context
    }

  }
  module.exports=WebServer

//最简koa.js实现

  callback(){
    let that=this;
    if(this.listeners('error').length===0){
      this.on('error',this.onerror)
    }
    const handleRequest=(req,res)=>{
      let context=that.createContext(req,res)
      this.middleware.forEach( (cb,idx)=>{
        try{
          cb(context)
        }catch(err){
          that.onerror(err)
        }
      })
    }
    if(idx+1>=this.middleware.length){
      if(res&&typeof res.end==='function'){
        res.end()
      }
    }
    return handleRequest
  }

相关文章

  • Koa学习资料

    Koa2进阶学习笔记下一代web框架Koajs的在线课程Koa实战深入浅出 Koa Koajs 中文文档和资料

  • nodejs 学习笔记(1)koa2 koa-generator

    koa2是nondejs的开发框架,最近学习nodejs,这里记记笔记 首先安装好nodejs 安装koa2,全局...

  • Koa学习笔记

    中间件 Koa 的最大特色,也是最重要的一个设计,就是中间件(middleware) 中间件的概念 代码中的log...

  • koa学习笔记

    一、中间件1、中间件的执行流程 以上是koa1的写法,koa2的写法有些不同,function * 写成 asyn...

  • koa学习笔记

    import和export在node中使用mongodb学习1 mongoose的学习2 先运行mongo.exe...

  • koa学习笔记

    安装 1. hello world app.use([路径],callback)ctx.body是ctx.resp...

  • koa

    koa 学习 中间件 koa-router koa-router 获取get/post请求参数 koa-bodyp...

  • nodejs学习笔记2(koa框架的使用)

    这是我以前学习的笔记,现在回顾mark一下 官网: https://koa.bootcss.com/[https:...

  • Koa学习笔记#1

    Koa的执行过程 背景:JavaScript为了实现异步编程,传统的方式有回调函数、事件监听等。所谓回调函数,就是...

  • Koa mongoose 学习笔记

    中间件 @Koa/cors 前后端分离 所以用了 @koa/cors 来解决跨域 koa-session 用来生成...

网友评论

      本文标题:koa学习笔记

      本文链接:https://www.haomeiwen.com/subject/icxbyktx.html