Koa -- 基于 Node.js 平台的下一代 web 开发框架
Koa
是一个新的 web
框架,由 Express
幕后的原班人马打造, 致力于成为 web
应用和 API
开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async
函数,Koa
帮你丢弃回调函数,并有力地增强错误处理。 Koa
并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
随着ES6的普及,async
/await
的语法受到更多JS
开发者的青睐,Koa.js
作为比较早支持使用该语法的Node
框架越来越受到大家的喜爱,虽然Koa.js
本身支持的功能很有限,但官方和社区提供了很多各种功能的中间件,本文精选了其中的十个,对于我们开发应用程序或者框架将会特别有用。
koa-router
路由是Web
框架必不可少的基础功能,koa.js
为了保持自身的精简,并没有像Express.js
自带了路由功能,因此koa-router
做了很好的补充,作为koa
星数最多的中间件,koa-router
提供了全面的路由功能,比如类似Express
的app.get
/app.post
/app.put
的写法,URL
命名参数、路由命名、支持加载多个中间件、嵌套路由等。其他可选路由中间件:koa-route
, koa-joi-router
, koa-trie-router
koa-bodyparser
koa.js
并没有内置Request Body
的解析器,当我们需要解析请求体时需要加载额外的中间件,官方提供的koa-bodyparser
是个很不错的选择,支持x-www-form-urlencoded
, application/json
等格式的请求体,但不支持form-data
的请求体,需要借助 formidable
这个库,也可以直接使用 koa-body
或 koa-better-body
koa-views
koa-views
对需要进行视图模板渲染的应用是个不可缺少的中间件,支持ejs
, nunjucks
等众多模板引擎。
koa-static
Node.js
除了处理动态请求,也可以用作类似Nginx
的静态文件服务,在本地开发时特别方便,可用于加载前端文件或后端Fake数据,可结合 koa-compress
和 koa-mount
使用。
koa-session
HTTP
是无状态协议,为了保持用户状态,我们一般使用Session
会话,koa-session
提供了这样的功能,既支持将会话信息存储在本地Cookie
,也支持存储在如Redis
, MongoDB
这样的外部存储设备。
koa-jwt
随着网站前后端分离方案的流行,越来越多的网站从Session Base
转为使用Token Base
,JWT
(Json Web Tokens)作为一个开放的标准被很多网站采用,koa-jwt
这个中间件使用JWT
认证HTTP
请求。
koa-helmet
网络安全得到越来越多的重视,helmet
通过增加如Strict-Transport-Security
, X-Frame-Options
, X-Frame-Options
等HTTP
头提高Express
应用程序的安全性,koa-helmet
为koa
程序提供了类似的功能,参考Node.js
安全清单。
koa-compress
当响应体比较大时,我们一般会启用类似Gzip
的压缩技术减少传输内容,koa-compress
提供了这样的功能,可根据需要进行灵活的配置。
koa-logger
koa-logger
提供了输出请求日志的功能,包括请求的url、状态码、响应时间、响应体大小等信息,对于调试和跟踪应用程序特别有帮助,koa-bunyan-logger
提供了更丰富的功能。
koa-convert
对于比较老的使用Generate
函数的koa
中间件(< koa2),官方提供了一个灵活的工具可以将他们转为基于Promise
的中间件供Koa2
使用,同样也可以将新的基于Promise
的中间件转为旧式的Generate
中间件。