近期做一个小项目,除了需要正常的web-server功能,还需要在后台定时执行数据统计和挖掘。参考现成的两种方案nodejs和nginx-lua后,最终因为npm社区的强大(其实是我比较懒,npm现成的东西实在是太多了)选择了nodejs
安装
nodejs
nodejs平台上最有名的就是express这款web开发框架。window平台安装nodejs过程比较顺利,不过在linux(debian)平台遇到一个问题。apt源中nodejs版本实在是太低了,根本运行不了最新express。有两个解决办法,一个是直接下载linux下运行bin文件,再分别针对node和npm做软连接,第二种就是直接下载源码安装。
直接下载二进制运行老遇到些莫名其妙的问题,所以我用的是第二种,wget下载后解压,一路make,make install。
这里稍微提下,如果是macosx平台下,可以直接下载对应安装包或者使用grew安装,个人建议brew,安装brew的时候记得切换为国内的brew源,强烈推荐中科大
mirrors.ustc.edu.cn的源,速度飞快。
生成Express工程
我们选用的是express框架,所以只需要用全局方式安装express其实就可以自行创建工程了,不过express附带了一个工程生成器。进入命令行,分别执行:
- 安装npm install express -g;
- 安装npm install express-generator -g;
- 进入工程所在目录,创建工程 express xxx;
- 进入工程目录,运行npm install安装express依赖模块;
恭喜,正常情况下,你的工程就顺利建立起来了。不过如果你不想等待30分钟以上的安装过程,建议你在执行这些命令前,安装cnpm,这是用于替换npm的一个工具,我们把他指向淘宝的npm镜像,命令如下:
npm install -g cnpm --registry=
https://registry.npm.taobao.org
后面的事情就简单了,在npm的地方全部替换成cnpm,体验秒下的感觉。
运行Express
接下来配置bin/www,使用npm start启动项目即可。不过如果部署到生产环境的服务器,还是建议你安装pm2,可以将项目分布式后台驻守,命令如下:
- 安装npm install pm2 -g
- 启动pm2 start bin/www --name xxx
- 停止pm2 stop xxx
- 重启pm2 reload xxx
Express中常用模块
下面再顺便推荐些必用的模块:
- async:由于nodejs全局充斥非阻塞回调,稍微复杂点的模块,肯定是回调嵌套回调,代码写得极其恶心。async就是用来解决这个问题的,其中的async.auto可以把嵌套关系串联起来,而且可以设置处理顺序,代码如下:
async.auto( { user:action.func1, search:action.func2, write:['user','search',func3] }, function(err, results) { func4(request, response, results); });
- config:json配置文件必备
- string-format:可以使用format('xxx{0}',replce)方式替换字符串;
- memory-cache : 内存缓存组件,使用getter和putter操作数据缓存。
- node-schedule: 可用于后台定期执行任务,我找的就是这个,用法也很简单,比如每5秒执行一个任务:
var schedule = require('node-schedule'); var rule = new schedule.RecurrenceRule(); rule.second = [1,6,11,16,21,26,31,36,41,46,51,56]; schedule.scheduleJob(rule, onLoop);