Tag Archives: Node.js

Hello World

node.js入门—-安装npm

npm是node.js的包管理器,有了它,就可以方面的下载、安装各种工具包
记得一年给mac安装npm的时候,还废了很大的劲,需要安装一些依赖,但是现在,有了更方便的安装方式:
curl http://npmjs.org/install.sh | sh
但是,我实际用上面的命令,会报错:“Error: EPERM, chmod ‘/usr/local/bin/npm’。。。”
没有仔细研究错误,直接把install.sh下载到本地,然后:
sh install.sh
还是不行~~~~
后来有查了资料,原来是需要root权限
sudo sh npm-install.sh
执行命令,输入密码,就ok啦

Hello World

初识node.js—-异步分段读取文件

以前只是在ajax的时候使用异步编程,这次通过node.js异步读文件,和以往的同步编程确实很不一样啊!

//File System
var fs = require('fs');
//fd is the file descriptor used by the WriteStream.
var logFd;
//日志文件
var log = 'i_access.log';
//读取过程需要的
var buf,
	logSize,
	start = 0,
	length,
	offse = 0,
	logArr = '',
	LENGHT = 1024 * 1024;//每次读取的长度,1M
 
//读取文件信息,获取文件长度
fs.stat(log, function(err, stats){
	if(err) throw err;
//	console.log(JSON.stringify(stats));
	logSize = stats.size;
	//打开文件
	fs.open(log, 'r', 0666, function(err, fd){
		if(err) throw err;
		logFd = fd;
		length = LENGHT < (logSize - offse) ? LENGHT : (logSize - offse);
		buf = new Buffer(length);
		//日志读取
		readLog();
	});
});
//日志读取
function readLog(){
	//读取
	fs.read(logFd, buf, start, length, offse, function(err){
		if(err) throw err;
		//按行切分
		logArr = buf.toString('utf8').split('\n');
		var last = false;
		//判断是否是最后一次调用
		if(offse + length < logSize){
			//最后一行不完整,抛掉,下次在取
			last = logArr.pop();
		}
		//调用日志分析模块,对logArr做处理
		logAnalysis();
		//处理参数,准备下次调用
		if(last !== false){
			offse += length - last.length;
			length = LENGHT < (logSize - offse) ? LENGHT : (logSize - offse);
			buf = new Buffer(length);
			//递归读取
			if(!lastRead){
				readLog();
			}
		}
	});
}
//日志分析模块
function logAnalysis(){
	//TODO:日志分析与读取......
	console.log(logArr.length);
	console.log(logArr[0]);
	console.log(logArr[logArr.length - 1]);
	console.log('------');
}