Skip to content

RocksonZeta/co-punch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

co-punch

Build Status Coverage Status NPM version Dependency Status

Punch old libraries!

##NOTE: yield function prefix has changed to '$'.

It should work within co or koa.they work well in node-0.11.* or gnode. After punch, we eliminate cumbersome callbacks.

##Installation

$ npm install co-punch --save

##Examples:

'use strict';
var punch = require('co-punch');
punch('nodejs','redis','mysql','mongodb','request');
var co = require('co');
var fs = require('fs');
var redis = require('redis');
var mysql = require('mysql');
var mongodb = require('mongodb');
var request = require('request');
var assert = require('assert');

var MongoClient = mongodb.MongoClient;
var pool = mysql.createPool({
	host     : 'localhost',
	user     : 'root',
	password : '123456',
	database : 'db',
	queryFormat: function(query, values) {
		if (!values) return query;
		return query.replace(/\:(\w+)/g, function(txt, key) {
			if (values.hasOwnProperty(key)) {
				return this.escape(values[key]);
			}
			return txt;
		}.bind(this));
	}
});
var redisClient = redis.createClient(6379,'localhost');

//callback function must use yield $*;
co(function*(){//or in koa
	//read file
	var file = yield fs.$readFile('package.json','utf8');

	//redis operations
	yield redisClient.$set('file' , file);
	assert.equal(file,yield redisClient.$get('file'));
	yield redisClient.$setJson('user1' , {name:1});
	var user1 = yield redisClient.getJson('user1');

	//mysql
	//query with full return [[result] , [properties]];
	var users = (yield pool.$query("select * from user"))[0];
	//user $q to get results only
	var apps = yield pool.$q("select * from apps where uid=:uid" , {uid:1});
	//user $q1 to get first item in results.
	var count = yield pool.$q1("select count(*) as count from user where name=:name and pwd=:pwd" , {name:'name',pwd:'111'}));
	console.log(users);
	//multi operations
	var con ;
	try{
        con = yield pool.$getConnection();
        yield con.$beginTransaction();
        yield con.$query("select some");
        yield con.$query("insert some");
        yield con.$query("update some");
        yield con.$commit();
    }catch(e){
        yield con.$rollback();
        console.error(e);
        //to do 
    }finally{
        if(con){
            con.release();
        }
    }
	
	//mongo operations
	var db = yield MongoClient.$connect('mongodb://localhost:27017/test');
	var collection = db.collection('test_users');
	var pUser = yield collection.$insert({name:"tom",age:10});
	var test_users = yield collection.find({name:"tom"}).sort('name').limit(1).$toArray();
	console.log(pUser,test_users);

	//request an url
	var html = (yield request.$request({url:"http://www.google.com"}))[1];
	var getHtml = (yield request.$get("http://www.google.com"))[1];
	console.log(html ,getHtml);
})();

##API:

var punch = require('co-punch')

punch(modules)

  • module {string|array|var args} - the name of the modules.After punch,old callback function can be call like this style yield $oldFn(args).

Now co-punch supports amqp,memcache,mongodb,mysql,nodejs,redis,request.

After punch:

obj.fn(args,function(e,r){}) -> var r= yield obj.$fn(args);//if e not null , this will throw an error.

try it now!

About

Punch old libraries!

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published