以前我一直使用rails搭建网站。rails与koa的基本理念很类似,都是基于中间件提供一层层的服务。所不一样的是,rails有不少内置的中间件,这使得开发者只须要关注MVC模块以及页面路由。而Koa这相对灵活不少,除了nodejs提供的http模块服务,其它的中间件都须要本身添加。node
若是对于网站开发不熟练,每每会不知道该添加哪些中间件。这篇文章就结合流程图讲解一下开发网站大体须要的中间件。git
检查request的header,只容许符合安全的请求经过。安全检查最流行的库是koa-helmet。能够经过koa-helmet作下面这些检查:github
http模块并不会解析传过来的数据。像表格里的数据,文件,json,xml都须要手动处理。数据预处理模块就是对这些数据进行处理的过程。处理完以后,能够经过键值在ctx.request里读取这些数据。比较流行的数据预处理模块能够参见koa-bodyparsernpm
某些资源能够直接经过静态资源,这样能够省去路由,控制器,等的开销。能够经过koa-static设置静态资源路径。当路径匹配时,能够直接找到静态资源。json
根据URL寻找对应的控制器以及视图。比较常见的中间件有(koa-route)[https://www.npmjs.com/package/koa-route], (koa-router)[https://www.npmjs.com/package/koa-router]缓存
进行身份验证,并提供简单的API来确认是否验证成功,log in以及log out。这个模块相对比较复杂,我也须要花更多时间来研究。用的比较多的有koa-passport, koa-jwt安全
这个模块是网站开发者主要投入精力的地方。其具体实现随网站的需求不一样而变化。服务器
选择视图模版。常见的模版有pug(jade), handlebars, hbs等。详情请看koa-pug, [koa-handlebars](https://www.npmjs.com/package/koa-handlebars], koa-hbs。session
经过设置etag来判断内容是否改变。若etag未变化,则返回304给客户端。不然返回带有内容的回复。可使用(koa-etag)[https://www.npmjs.com/package/koa-etag]与(koa-conditional-get)[https://www.npmjs.com/package/koa-conditional-get]来实现基于etag的缓存koa
将最终的输出打包。比较流行的打包库为koa-compress 。
logger
koa-logger在请求来临和返回时输出在控制台输出简单的信息。
error
koa-error能够对服务器抛出的异常进行捕捉,并设置模版进行渲染
session
koa-session在服务器端设置网站的session
参考资料