不支持一个对象在不同异步中使用,模仿的php框架 speedphp中的model模块

GaryMysql.js

var mysql = require('mysql');
var pool = null;
//由于使用了一些类的属性,所以不支持在多线程情况下使用同一对象执行sql
module.exports = class GaryMysql{
constructor(tabName, pk) {
this.tabName = tabName;//类中变量
this.pk = typeof pk !=="undefined"?pk:'id';
this.initSet();
}
static setDB(host,user,password,database)
{
if(pool==null)
{
pool=mysql.createPool({
connectionLimit : ,
host : host ,
user : user ,
password : password ,
database : database
});
}
}
query(sql,callback){
var values=this.values;
this.initSet();
pool.getConnection(function(err,conn){
if(err){
callback(err,null,null);
}else{
conn.query(sql,values,function(qerr,vals,fields){
//释放连接
conn.release();
//事件驱动回调
callback(qerr,vals,fields);
});
}
});
} //strWhere
// 链式调用
where(whereSet,values)
{
this.values = typeof values !=="undefined"?values:[];
if(typeof whereSet==='string')
{
this.strWhere=whereSet;
}else if(typeof whereSet==='object')
{
var strWhere='';
for(var key in whereSet)
{
if(strWhere!='')strWhere+=' AND ';
strWhere+=key+'=?';
this.values.push(whereSet[key]) ;
}
this.strWhere=strWhere;
}else{
this.strWhere='';
}
if(this.strWhere!="")this.strWhere=" WHERE "+this.strWhere return this;
} findCont(callback){
var sql='SELECT COUNT(1)C FROM '+this.tabName+this.strWhere;
this.query(sql,function(err, result){
if(!err)
{
result=result[].C;
}
if(typeof callback =="function")
{
callback(err,result);
}
});
}
find(callback,order,field)
{ this.findAll(function(err,rows,fields){
if(typeof callback =="function")
{
rows=rows&&rows.length>?rows[]:null;
callback(err,rows,fields);
}
},order,field,);
}
findAll(callback,order,field,limit){
order = typeof order !=="undefined"?' ORDER BY '+order:'';
field = typeof field !=="undefined"?field:'*';
limit = typeof limit !=="undefined"?' LIMIT '+limit:''; var sql='SELECT '+field+' FROM '+this.tabName+this.strWhere+order+limit;
this.query(sql,function(err,rows,fields){
if(typeof callback =="function")
{
rows=rows&&rows.length>?rows:null;
callback(err,rows,fields);
}
});
} //setData 需要在 setWhere前面
data(dataSet){
this.dataStr='';
this.values = typeof values !=="undefined"?values:[];
for(var key in dataSet)
{
if(this.dataStr!='')this.dataStr+=',';
this.dataStr+=key+'=?';
this.values.push(dataSet[key]) ;
}
return this;
}
del(callback){ var sql='DELETE FROM '+this.tabName+this.strWhere;
this.query(sql,function(err,result,fields){
if(typeof callback =="function")
{
if(!err)
{
result=result.affectedRows;
}
callback(err,result,fields);
}
});
}
update(callback){
var sql='UPDATE '+this.tabName+' SET '+this.dataStr+this.strWhere;
this.query(sql,function(err,result,fields){
if(typeof callback =="function")
{
if(!err)
{
result=result.changedRows;
}
callback(err,result,fields);
}
});
}
//
create(dataSet,callback)
{
var fields="";
var valuesStr="";
for(var key in dataSet)
{
if(fields!="")fields+=",";
if(valuesStr!="")valuesStr+=",";
fields+=key;
valuesStr+="?";
this.values.push(dataSet[key]) ;
} var sql="INSERT INTO "+this.tabName+"("+fields+")VALUES("+valuesStr+")";
this.query(sql,function(err,result,fields){
if(typeof callback =="function")
{
if(!err)
{
result=result.insertId;
}
callback(err,result,fields);
}
});
} initSet(){
this.values=[];
this.dataStr='';
this.strWhere='';
}
}

使用

var GaryMysql = require('./GaryMysql');
GaryMysql.setDB('localhost','root','root','msg');
var m_main=new GaryMysql('m_main');
m_main.where({"txt":""}).find(function(err,result,fields){
if(err)
{
console.log(err);
}
console.log(result);
}); m_main.where({"txt":""}).findAll(function(err,result,fields){
if(err)
{
console.log(err);
}
console.log(result);
});
//实际不能直接这样一个对像使用两次,只有在回调里面才可以,最好是重新new一个,或者在回调中使用,

[node.js学习]为node.js写的一个操作mysql的类的更多相关文章

  1. 自己写的一个操作Mysql的简单的实例

    #include <WinSock.h> #include <stdio.h> #include <iostream> #include <windows.h ...

  2. Node.js学习笔记——Node.js开发Web后台服务

    一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...

  3. Sea.js学习4——Sea.js的配置

    可以对 Sea.js 进行配置,让模块编写.开发调试更方便. seajs.config seajs.config(options) 用来进行配置的方法. seajs.config({ // 别名配置 ...

  4. python学习笔记-(十六)python操作mysql

    一. mysql安装 1. windows下安装mysql 1.1. 下载源: http://dev.mysql.com/downloads/installer/,请认准对应版本 Windows (x ...

  5. python学习之模块(pip),列表生成式,模块操作mysql,excel

    python基础 生成式 列表生成式 格式 [表达式 for 表达式 in 迭代对象 (可加判断)] 原: res1 = [] for i in range(1,5): res1.append(i) ...

  6. Node.js学习(Node.js基础)

    1.开发环境搭建 v8引擎是作为解析JavaScript程序来运行的 nodejs是一个高性能的,第一个体现在他的JavaScript解析速度很快,v8引擎性能很高,第二个事件驱动和非阻塞 2.全局对 ...

  7. Node.js学习笔记(5)--文件简单操作

    说明(2017-5-3 11:53:45): 1. foo.js var fs = require("fs"); var documents = []; fs.readdir(&q ...

  8. Sea.js学习5——Sea.js的构建工具spm

    如果项目遵循推荐的标准目录结构: foo-module/ |-- dist 存放构建好的文件 |-- src 存放 js.css 等源码 | |-- foo.js | `-- style.css `- ...

  9. Sea.js学习3——Sea.js的CMD 模块定义规范

    在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规则. 在 CMD 规范 ...

随机推荐

  1. PHP三维优先级运算

    昨天去某大型公司面试,做了一套面试题,整套面试题的基础要求比较高,对于js的使用有一定的要求.在本次面试中碰到PHP三维运算优先级的问题,先看题: <?php $b=20; $c=40; $a= ...

  2. 怎样修改织梦网站的favicon图标

    现在很多的网站浏览器栏上都有favicon图标,比如百度,大家用织梦做好网站后,可能发现自己的网站favicon图标默认的不好看,如何修改织梦网站的favicon导航图标呢,很多人肯定有过困惑,小编遇 ...

  3. dotnet watch+vs code提升asp.net core开发效率

    在园子中,已经又前辈介绍过dotnet watch的用法,但是是基于asp.net core 1.0的较老版本来讲解的,在asp.net core 2.0的今天,部分用法已经不太一样,所以就再写一篇文 ...

  4. jQuery阻止向上冒泡事件

    //阻止起泡取消下面的注释 e.stopPropagation(); //或者使用这种方式 //return false; }); $('.three').click(function(e){ ale ...

  5. 一点点学习的心得-MetroJS

    原文:http://zhangxiaolun.lofter.com/post/217084_73a1a9# 在最近的一个项目中,页面上有一部分由一些图片方块组成,要求说是:“做成类似动画的东东,最好可 ...

  6. 学习C++从入门到精通的的十本最经典书籍

    原文:http://blog.csdn.net/a_302/article/details/17558369 最近想学C++,找了一下网上推荐的书籍,转载过来给大家分享 转载自http://c.chi ...

  7. 第三次Scrum编码冲刺

    1.小组成员 周 斌 舒 溢 许嘉荣 唐 浩 黄欣欣 廖帅元 刘洋江 薛思汝 2.个人在小组第三次冲刺的任务及其完成情况描述. 这次小组活动中我负责测试程序的实现情况,确保程序的每个模块都能正常运行, ...

  8. 关于比特币的“冷存储”和Armory的使用

    转自:http://8btc.com/thread-1164-1-1.html 最近随着比特币话题的火热,又有一批人卖房或倾产换成比特币入圈,这一次与以前不同的是,以前倾产入圈的人都是技术人员,有足够 ...

  9. python 数据结构应用

  10. Redis 优化之 tcp-backlog

    默认值 511 tcp-backlog:511 此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxc ...