之前我一直使用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

koa服务器搭建基础的更多相关文章

  1. FTP服务器搭建基础工具:Serv-U 14.0.2使用教程

    安装教程   1.在本站下载好压缩包,将文件解压,双击运行“ServUSetup官方原版程序.exe”程序,弹出语言选择框,选择“中文(简体)”,点击“确定”开始安装   2.点击“下一步”进行安装  ...

  2. ​Linux下的SVN服务器搭建

    ​Linux下的SVN服务器搭建 鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总 ...

  3. 版本控制-svn服务器搭建和常用命令(centos 6.3)

    Svn是比较优秀的版本控制工具,虽然功能和性能上无法和Git媲美,但由于其容易搭建和使用的特性,所以在各个小公司还是很受欢迎的.使用Git可参考<版本控制-Git服务器搭建和常用命令使用> ...

  4. JAVA服务器搭建之问题总结

    负责维护公司产品的web服务器搭建与维护,最近遇到一下状况,今天在这里简单总结一下,希望对于刚刚一些刚入行的小伙伴有所帮助,避免再走弯路. 第一点:Tomcat内存设置: 一.常见的Java内存溢出有 ...

  5. Linux下的SVN服务器搭建

    鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结 /******开始****** ...

  6. Mqtt服务器搭建

    .bg { background: #99CC99 } Mqtt服务器搭建 测试环境:CentOS64位 1.安装基础软件 yum install gcc-c++ yum install cmake ...

  7. gitlab服务器搭建教程

    gitlab服务器搭建教程 ----2016年终总结 三 参考https://bbs.gitlab.cc/topic/35/gitlab-ce-8-7-%E6%BA%90%E7%A0%81%E5%AE ...

  8. linux 中 svn 服务器搭建 重启

    鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结 /******开始****** ...

  9. 腾讯云服务器搭建Apache/PHP/MySQL环境

    软件环境 Windows Server 2008 R2 企业版 SP1 64位 刚刚进入 Windows Server ,你会看到以下界面: 列出了服务器的基础信息和常用配置 下载 XAMPP htt ...

随机推荐

  1. ORACLE中内部函数SYS_OP_C2C和隐式类型转换

    什么是SYS_OP_C2C呢?官方的介绍如下: SYS_OP_C2C is an internal function which does an implicit conversion of varc ...

  2. C#核心基础--类的声明

    C#核心基础--类的声明 类是使用关键字 class 声明的,如下面的示例所示: 访问修饰符 class 类名 { //类成员: // Methods, properties, fields, eve ...

  3. 洗礼灵魂,修炼python(80)--全栈项目实战篇(8)—— 计算器

    用正则表达式开发一个计算器,计算用户给定的一串带有加减乘除的公式. 要求:不能使用eval转换字符串 分析: 要求简单,就是计算混合运算,但是不能使用eval直接转换,主要就是把整个式子中的小括号优先 ...

  4. 关于SqlServer数据表操作

    --修改表字段长度alter table Tbl_Count_User_Ref ALTER COLUMN CountName nvarchar(500);新增字段alter table 表名 add ...

  5. Turtle绘制带颜色和字体的图形(Python3)

    转载自https://blog.csdn.net/wumenglu1018/article/details/78184930 在Python中有很多编写图形程序的方法,一个简单的启动图形化程序设计的方 ...

  6. ASP.NET -- WebForm -- Session的使用

    ASP.NET -- WebForm --  Session的使用 Session是服务器端状态保持机制. 1. Test4.aspx文件与Test4.aspx.cs文件 <%@ Page La ...

  7. June 3. 2018 Week 23rd Sunday

    You only get one shot; do not miss your chance to blow. 机会只有一次,不要错过. From Eminem, "Lose Yoursel ...

  8. Tomcat结构

    Tomcat结构 Server(服务器) 服务器代表整个Tomcat容器. Tomcat提供了服务器接口的默认实现(很少由用户定制). Service(服务) 服务是位于服务器内部的中间组件,将一个或 ...

  9. ESLint笔记

    ESLint是JavaScript的代码检查工具.因为JS是弱类型的语言,不需要编译,代码错误是在运行时调适的,所以需要个工具在编码的过程发现问题.ESLint的初衷是为了让程序员可以创建自己的检测规 ...

  10. Centos 7 安装JAVA环境 jdk1.8

    在Linux环境(Centos 7)安装jdk1.8,有以下两种方式 方式一.安装openjdk #   yum install java-1.8.0-openjdk* -y 方式二.使用wget下载 ...