koa服务器搭建基础

之前我一直使用rails搭建网站。rails与koa的基本理念很相似,都是基于中间件提供一层层的服务。所不同的是,rails有很多内置的中间件,这使得开发者只需要关注MVC模块以及页面路由。而Koa这相对灵活很多,除了nodejs提供的http模块服务,其它的中间件都需要自己添加。

如果对于网站开发不熟练,往往会不知道该添加哪些中间件。这篇文章就结合流程图讲解一下开发网站大致需要的中间件。

Screen Shot 2017-04-14 at 11.20.21.png

安全检查

检查request的header,只允许符合安全的请求通过。安全检查最流行的库是koa-helmet。可以通过koa-helmet做下面这些检查:

  • clickjacking
  • 移除X-Powered-By
  • 限制只通过https
  • xss攻击过滤
  • 伪造证书攻击
    更多的检查大家可以查看koa-helmet的文档。

数据预处理

http模块并不会解析传过来的数据。像表格里的数据,文件,json,xml都需要手动处理。数据预处理模块就是对这些数据进行处理的过程。处理完之后,可以通过键值在ctx.request里读取这些数据。比较流行的数据预处理模块可以参见koa-bodyparser

静态资源

某些资源可以直接通过静态资源,这样可以省去路由,控制器,等的开销。可以通过koa-static设置静态资源路径。当路径匹配时,可以直接找到静态资源。

路由

根据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

缓存

通过设置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-compress

其他中间件

  1. logger
    koa-logger在请求来临和返回时输出在控制台输出简单的信息。

  2. error
    koa-error可以对服务器抛出的异常进行捕捉,并设置模版进行渲染

  3. session
    koa-session在服务器端设置网站的session

参考资料

  1. koajs github wiki

推荐阅读更多精彩内容

  • 框架提出的背景 ES6/7带来的变革 自ES6确定和ES7中async/await开始普及,Node的发展变得更加...
    宫若石阅读 7,404评论 1 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 121,074评论 16 134
  • 1.简书 koa是由Express原班人马打造,致力于成为一个更小、更富有表现力、更健壮的Web框架。使用koa编...
    不去解释阅读 2,262评论 0 11
  • 从那天起,我开始失眠 你控制了谁的笑声,你就控制了他的人生。
    先生说阅读 87评论 0 3
  • 父亲节父亲节到了,谈谈父亲,人人生而有父,孙悟空之类的另当别论。无论是否还在这个世界上,他都会活在每个人的心中。这...
    石川河女神阅读 41评论 0 0