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')
module
{string|array|var args}
- the name of the modules.After punch,old callback function can be call like this styleyield $oldFn(args)
.
Now co-punch
supports amqp
,memcache
,mongodb
,mysql
,nodejs
,redis
,request
.
obj.fn(args,function(e,r){}) -> var r= yield obj.$fn(args);
//if e not null , this will throw an error.
try it now!