您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    深化浅出Nodejs中间件原理(3)
    时间:2021-08-10 21:07 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

        if (typeof fn !== 'function') throw new TypeError('Middleware must be composed of functions!'

      } 

      return function (context, next) { 

        // 采用闭包将索引缓存,来完成调用计数 

        let index = -1 

        return dispatch(0) 

        function dispatch (i) { 

          // 避免next()办法重复调用 

          if (i <= indexreturn 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 { 

            // 包装next()前往值为Promise对象 

            return Promise.resolve(fn(context, dispatch.bind(null, i + 1))); 

          } catch (err) { 

            // 异常处置 

            return Promise.reject(err) 

          } 

        } 

      } 

    应用koa中间件机制完成一个本人的koa中间件

    学习了中间件的设计机制和原理, 我们是不是想马上写一个中间件呢? 笔者这里给大家举一个例子. 在H5-Dooring项目的效劳端代码中, 我们需求对用户登录权限停止分发, 此时我们提供一致个中间件来处置, 如下代码所示:

    // 模拟数据库操作 

    const token = db.user(); 

     

    // router或许koa的中间件一定要用await处置next,否则将不能正常照应数据 

    export default async (ctx, next) => { 

      const t = ctx.request.header.authorization 

      let uid = ctx.request.header['x-requested-with'

      let uidArr = uid.split(','

      if(uidArr.length > 1) { 

          uid = uidArr.pop().trim() 

      } 

        if(token[uid] && token[uid][1] === t) { 

            await next() 

        }else { 

            ctx.status = 403; 

            ctx.body = { 

                state: 403, 

                msg: '你没有权限操作' 

            } 

        }   

    以上代码即完成用户登录态处置, 假设用户在没有登录的状况下防问任何需求登录的接口, 都将前往权限不足或则在央求库中让其重定向到登录页面.

    所以, 明天你又博学了吗?

    【编辑引荐】

    PHP静态网站开发实录之前台UI设计切页视频课程

    SQLServer2019数据库初级开发

    整合 Windows 11 界面,微软教开发者如何用 WinUI/Fluent Design 晋级其现有顺序

    iOS 14.8初次现身苹果正开发:不想升iOS 15的有新选择了!

    清林云BaaS康文昌:API后端即效劳将成为数字化基建

    (责任编辑:admin)