之前我一直使用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. Spring MVC 异常处理 (九)

    完整的项目案例: springmvc.zip 目录 实例 除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式) <dependency> ...

  2. django数据查询之F查询和Q查询

    仅仅靠单一的关键字参数查询已经很难满足查询要求.此时Django为我们提供了F和Q查询: # F 使用查询条件的值,专门取对象中某列值的操作 # from django.db.models impor ...

  3. sql server连接oracle并实现增删改查

    需要一个软件ODAC112040Xcopy_64bit 我连接的oracle是11g r2  sqlserver 是 2016 软件下载 https://pan.baidu.com/s/1OpYmpR ...

  4. 利用Python通过频谱分析和KNN完成iphone拨号的语音识别

    最近这段时间,学校里的事情实在太多了,从七月下旬一直到八月底实验室里基本天天十二点或者通宵,实在是没有精力和时间来写博客.这周老师出国开会,也算有了一个短暂的休息机会,刚好写点有意思的东西. 上周在天 ...

  5. puppet 横向扩展(三)

    Table of Contents 1. 概述 2. 实验环境 3. 实验步骤 3.1. 机器B 的配置 3.2. 机器A 的配置 3.3. 测试配置结果 概述 横向扩展实验之三 – 将CA 认证服务 ...

  6. March 04th, 2018 Week 10th Sunday

    Tomorrow never comes. 我生待明日,万事成蹉跎. Most of my past failures can be chalked up to the bad habit of pr ...

  7. 不同主机的docker容器互相通信

    Docker启动时,会在宿主主机上创建一个名为docker0的虚拟网络接口,默认选择172.17.0.1/16,一个16位的子网掩码给容器提供了 65534个IP地址. docker0只是一个在绑定到 ...

  8. echarts图表大小随着外部div大小变化

    jquery有resize()事件,但直接调用没有起作用,引入jquery.ba-resize.js文件就可以了. 例如: <div class="chart" > & ...

  9. [NOI2017]蔬菜

    [NOI2017]蔬菜 题目描述 大意就是有\(n\)种物品,第\(i\)个物品有\(c_i\)个,单价是\(a_i\).然后每天你可以卖出最多\(m\)个物品.每天结束后第\(i\)种物品会减少\( ...

  10. [1] YOLO 图像检测 及训练

    YOLO(You only look once)是流行的目标检测模型之一, 原版 Darknet 使用纯 C 编写,不需要安装额外的依赖包,直接编译即可. CPU环境搭建 (ubuntu 18.04) ...