近期做一个小项目,除了需要正常的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依赖模块;
运行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);