共计 1866 个字符,预计需要花费 5 分钟才能阅读完成。
上篇文章中,我们介绍了数据采集相关的知识,这篇文章中,我们来整理下 nodejs 开发后台常用的库,然后选择 hapi 来进行 restful API 的开发,以及定时任务、RPC 的使用。
nodejs 主流框架介绍
我们先来看下目前 nodejs 主流的框架:
1. Express(43.4k)
对于一个已经在使用 nodejs 的开发人员来说,Express 并不是一个新鲜事,它提供了对 nodejs 原始 API 的比较好的封装,从而使开发者更加容易使用 nodejs。
2. Meteor(41k)
Meteor 也是一个很出色的框架,记得官网有一句话,“Ship more with less code”,确实也是像这句话一样,不管是服务器数据库的访问,业务逻辑实现,还是客户端的展示,所有的流程都是开箱即用的。还有一个点应该是“配置大于开发”的思想,很多东西都是可以直接通过配置来实现,不需要太多的代码,这点我觉得也是这个框架很厉害的一个点。
3. Koa(25.8k)
Koa 是 express 的原班人马开发的,核心是 ES6 的 generator,使用 generator 来实现中间件的流程控制,在 Koa 框架中就再不会看到复杂的 callback 了。框架本身非常小,只打包了一些必要的功能,但是它本身通过良好的模块化组织,让使用者可以按照自己的想法来实现一个扩展性非常好的应用。
4. sails(20.4k)
Sails 在底层使用 express 来提供对 http 请求的处理,同时使用 Socket.IO 框架来处理 websocket 请求,也通过 waterline 框架实现了 ORM 功能,你的应该程序可以在不进行大的修改的前提下,就可以从一个后端数据库,切换到另外后端数据库(也可以是一个 NoSQL 数据库)。
5. egg(12.4k)
egg 是阿里的一个团队,基于 Koa 开发的框架,奉行【约定优于配置】,按照一套统一的约定进行应用开发,插件机制也比较完善,也是很好用的。之前写的微博词云的 api 就是用 egg 来写的,http://zz.mcust.cn, 这个网站也是 egg 来写的。
6.hapi(11k)
Hapi 在众多的框架中并非一个老牌选手,然而他却成功的在这当中创造了自己的一个生态圈。致力于完全的分离 node HTTP 服务器,路由以及业务逻辑,并更多的聚焦于如何尽可能的通过配置而非代码来控制东西。
这次选择 Hapi 的原因其实也很简单,因为之前没用过。
使用 Hapi
每一次学习一个东西,其实套路都是差不多的,我们先去官网看看。
这里我们有很多的关键点,有更新信息,指南说明,api 文档,插件,版本号,最近更新时间,下载次数,源码等等信息。看更新时间和下载次数看来,活跃人数还是比较多的,这些数据也能从某个维度上来对一个框架的做一些评判。
然后进入 tutorials,照着里面的教程动手实践一下,学习如何创建 http 服务,如何使用路由,获取 url 参数,cookies,日志、验证、视图等等。
下面就正式进入小程序的接口开发中
创建项目,项目文件目录大致如下:
- models 代表数据模型,我在里面定义了 sequelize 的模型,数据结构;
- controllers 里边是大部分的业务逻辑;
- routers 里边定义了路由,以及参数的验证,处理路由的方法等;
- common 里面定义了公共的一些方法,一些加密的方法,生成 uuid 的方法等;
- config 里面是项目数据库配置和插件配置;
- log 是放日志文件的地方。
然后我们这里也用了很多的插件,和一些工具包等来帮助我们更快地完成任务。
这块其实比较重要的一点是热部署,开发环境中,使用了 supervisor 来部署;而生产环境我们是用了 pm2 来部署。
下面我们来看下 hapi 中如何使用定时任务
我们先看看 hapi 有没有已经有的定时任务工具,我们去官网插件里搜一下“cron”,
发现是有的,那我们就直接用 hapi-cron 这个库即可。
需要先配置下定时任务:
然后注入到服务中即可。
上面的配置表示每天的 6 点、11 点、16 点、23 点回去请求 /spider_articles 这个请求。对 cron 表达式不熟悉的同志们可以稍微补补这方面的知识。
然后这个接口里是发送了三个请求,是我们上次部署好的爬虫服务。
这样我们就通过定时任务完成了定时去爬数据的工作。
别的接口都是比较正常的,需要操作下数据库即可,还有一部分是需要 rpc 的,也是比较简单好理解的,在这里就不细谈了。
本节关于 hapi 的部分到这里就结束了。
NEXT
下一篇,我们会介绍小程序的开发,mpvue,以及小程序原始组件的使用,还有小程序一些重要的配置等。