node.js框架之KOA框架

时间:2024-03-26 15:52:09

node.js框架之KOA

koa框架是express框架之后使用的比较多的框架,虽然说现在已经有了更新的egg框架,但是koa框架还是要好好的学习一下。
koa框架和express框架相比较下他的好处是在于它去除了大量的回调函数的使用,封装了async 和 await处理异步函数的方式,async await是es7出的新语法,也是处理promise的最佳解决方案了。

Koa的基本结构

node.js框架之KOA框架

路由

  • 在KOA中,将路由模块给分离了出去,这样的好处是在模块化开发的时候可以不用重复的引入KOA模块,只需要引入单独的router模块就可以实现模块化的路由,这个在express框架中还是没有被得到解决
  • 使用到的模块是koa-router
  • 获取GET传值
  • 很多操作其实使用get传值就可以实现,并不是只有post请求才能够传值,因为get传值的方式是直接将需要传递的内容在url中体现,所以安全性会比较低,但是还是可以做一个例如查看产品详情,删除产品等等功能还是可以使用GET请求的方式来操作。
  • 在KOA中封装好的异步对象ctx,它包含原生的req、res和自己又独立封装的request、response对象,
  • 如url为http://127.0.0.1:666/?id=123
  • ctx.query获取get传值并且以对象的形式展现 结果是{ id: '123' }
  • ctx.querystring.获get传值以字符串的形式展现 结果是id=123
  • koa中一个及其重要的一个概念是中间键的概念,中间键的执行是洋葱模型的执行顺序,先进的最后反弹时时最后执行,router模块也是以中间键的形式来运行的,所以当我们配置好了router的路由时,需要使用使用一下这个中间键app.use(router.routes()).use(router.allowedMethods)
  • 获取POST传值
  • koa中接收post传值有两种方式,一是以原生的方式来获取post传值,二是以koa-bodyparser中间键的形式来获取post传值。
  • 因为koa的ctx对象中封装了原生的req,所以可以使用req的data方法和end方法来持续接收流的数据。
    node.js框架之KOA框架
  • 使用koa-bodyparser中间键来获取post数据,引入这个中间键,再再app上使用一下即可,也比较简单如app.use(bodyparser())就可以了
    node.js框架之KOA框架
  • 在引入了这个中间键之后,只要使用ctx.request.body就能够获取到前端传递的post数据
    node.js框架之KOA框架

静态资源中间键的使用

  • 像比如我们输入一串url地址,能够直接得到一张图片,或者是api的一串json字符串,这些操作在使用了静态资源中间键之后都可以实现,相当于在服务器中暴露出了一个文件夹,这个文件夹里面包含各种资源,如图片、音频、视频等等,我们再再url中以路径的形式来访问这个公开文件夹下的文件就能够获取到这些资源
  • 在koa中需要使用到koa-static这个中间键,只需要将这个文件夹暴露出来即可再在app中注册即可。需要配合path模块一起使用
    node.js框架之KOA框架
    node.js框架之KOA框架

cookie

  • http协议是一种无状态的协议,所以在早期的时候,为了保存浏览器的一些登录状态,就会使用cookie来保存,cookie现在使用的也很多,cookie可以实现的操作有保护用户信息、猜你喜欢、浏览历史记录等等操作,只需要在这个域下设置了cookie,那么访问这个域下面的子路由都会携带上cookie
  • cookie是存在浏览器的数据
  • 在koa中,使用ctx.cookies.set('cookieName','value',option)其中option表示的设置一些参数,最常需要设置的参数有设置过期时间
  • 获取cookie使用ctx.cookies.get('cookieName')
    node.js框架之KOA框架
  • 在koa中,cookie是不能够直接设置成中文的,但是在我们日常的一些浏览器的一些操作中中文的操作又很多,所以我们就需要使用buffer对象来做为一个中间变量操作,在存的时候先将中文转成base64的格式,在读的时候再通过base64的格式来转一遍即可
  • buffer的使用
  • 编码:Buffer.from('value').toString('编码格式')在不提供编码格式的时候,默认会转为二进制的格式
  • 解码:Buffer.from(转码的内容,'原来的编码格式').toString('转码的编码格式')在不提供转码格式的时候,会默认以utf-8的编码格式进行转码

session

  • sesson和cookie一样,也是为了在不同页面之间进行数据传递
  • 不同点在于session是存在服务端,cookie是存在浏览器中,session安全性比cookie高,session的使用是依赖coolie的
  • koa中使用seesion需要使用到koa-session模块,进行一些基础的配置之后再在app实例中挂载,就可以在路由中使用session。
    node.js框架之KOA框架
  • 以上的config配置中一般需要配置的只有maxAge过期时间 rolling和renew防止过期的操作,别的一般都不需要怎么配置
  • 配置好了之后,在路由种可以使用ctx.session.sessionName = value的形似设置session,以ctx.session.sessionName的形式来获取session

koa跨域处理

  • 在koa中处理跨域问题是非常简单的,只需要配置一个cors即可也就是koa-cors模块的使用
  • 在引入了这个模块之后,只需要在app实例中挂载一下即可app.use(cors())
    node.js框架之KOA框架
  • 如果只有一些单独的路由api需要配置跨域处理,只需要在单独的路由模块上设置ctx.set("Access-Control-Allow-Origin", "*")即可实现个别模块的跨域处理

高性能的模板引擎koa-art-template

  • 模板引擎主要是后端渲染需要使用的工具,虽然现在大部分公司都采用的前后端分离的开发方式,但是这种不分离的模板引擎也是我们需要了解的操作,这个模板引擎也是非常高性能的一些模板引擎,相比于ejs等等模板引擎,语法前端化,速度更快,效率更高
  • 需要引入这个模板引擎,之后再模板引擎于app实例结合使用,代码如下
    node.js框架之KOA框架
  • 配置了之后,就可以再后端路由中来设置渲染的模板的渲染
    node.js框架之KOA框架
    前端再进行一些渲染即可,渲染的代码风格和vue的插值表达式很像,部分渲染的代码如下,完整的模板引擎的代码可以查看koa-art-template的官网
    node.js框架之KOA框架
  • 封装mongoDB数据库

  • mongodb数据库是一款典型的非关系型数据,和关系型数据库相比较它的好处就是以json对象的形式进行存储,传统的关系型数据库典型代表就是mysql,需要处理各表之间的关系。
  • mongodb和mysql的一些基本操作语法
    node.js框架之KOA框架
    node.js中操作mongodb,需要引入mongodb这个模块,具体的一些操作如下:
    node.js框架之KOA框架
  • 单例模式
  • 在我们自己封装的db数据库的代码中,每次操作的前提都是必须是连接上数据库,但是在我们要考虑到在做不同操作的时候每次都要连接数据库嘛?比如查询数据连接一次,删除数据再连接一次?这样肯定是十分的损耗后端性能的,所以这时候我们就是需要使用单例模式–也就是只有一个单一的实例
  • 实现单例模式其实需要使用到的是ES6的class类的静态方法的使用,注册实例的时候使用静态方法来注册即可了,代码如下:
    node.js框架之KOA框架
  • 封装的细节代码在码云中又源码,这里就不展示了。

实战的操作

  • 在项目实战中,使用前面的一些模块就可以实现全部的项目的开发了,只要全部都串起来,比如html页面的一些静态资源如css、js文件的引入就需要使用static静态资源的模块,不同的url中路由需要使用使用koa-router模块,接收前端post传递的数据需要使用到koa-body-parser模块,不同路由渲染不同的html页面需要使用到koa-art-template,个别访问其他域的资源涉及跨域需要使用到koa-cros模块,用户及其他数据的信息需要使用到mongodb模块。综上所述这些模块就可以构成完整的项目了
  • 在项目中我们可能会有前台的增删改查,后台的增删改查,api的增删改查,这些就需要我们使用了router摩卡哎进行深度的路由模块化,如:
  • views文件夹下全部放需要渲染的前端页面,如果页面比较多我们也可以在views文件夹下多创建几个子文件夹,如前端文件夹,后端文件夹,api文件夹来分别放不同模块的html文件
  • routes文件夹下存放各种模块的文件,可以分的很细,在项目足够大的情况下,相对分的越细,越有利于我们的维护
    node.js框架之KOA框架
    node.js框架之KOA框架
    以这样中间键的形式来设置路由的深度模块化,当路由时以admin开头时,走的是admin.js这个路由模块下的路由
综上所以,koa需要学习的还有很多,加油