简单的JS同步调用函数实现-初探

最近自己试验性的写了一个可以实现同步调用的JS函数。

使用的递归的原理。

var syncExe = function(){
	var fLen = arguments.length;

	var exe = function(funcs,count,sum,retval){
		if(!!retval){
			if(!('return' in exe)){
				exe['return'] = [];
			}
			exe['return'].push(retval);
		}
        if(count == sum){
            return;
        }else{
            funcs[count](function(str){
                count++;
                exe(funcs,count,sum,str);
            });
        }
	}
	exe(arguments,0,fLen);
	return exe['return'];
};

Continue reading

为Node.js的express框架加入session的memcache存储支持

需要的依赖:connect-memcached

var express = require('express');
var app = express.createServer();
var mcStore = require('connect-memcached')(express);
app.use(express.cookieParser());//必须,用于解析cookie
var mc = new mcStore({hosts: "localhost:11211"});
app.use(
	express.session(
			{
				key: "zensessid", //这里必须为全小写,否则每次都会构造一个新的session id和session给用户。这可能是express的一个bug,原理可能是express根据该key转小写后的字符串去查找客户端cookie里的该键值对。
				secret: "zensess", //加密字符串
				store:mc
			}
		)
);
app.get('/',function(req,res){
	req.session.web = 'http://z-en.com';
});

Node.js连接Buffer对象的正确方法

万能的适应各种编码而且正确的拼接Buffer对象的方法是什么呢?我们从Node.js在github上的源码中找出这样一段正确读取文件,并连接buffer对象的方法

var buffers = [];
var nread = 0;
readStream.on('data', function (chunk) {
    buffers.push(chunk);
    nread += chunk.length;
});
readStream.on('end', function () {
    var buffer = null;
    switch(buffers.length) {
        case 0: buffer = new Buffer(0);
            break;
        case 1: buffer = buffers[0];
            break;
        default:
            buffer = new Buffer(nread);
            for (var i = 0, pos = 0, l = buffers.length; i < l; i++) {
                var chunk = buffers[i];
                chunk.copy(buffer, pos);
                pos += chunk.length;
            }
        break;
    }
});

Continue reading