不支持一个对象在不同异步中使用,模仿的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. 工厂模式(Factory Pattern)

    一.工厂模式(Factory Pattern)的介绍 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式.在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使 ...

  2. 冒泡排序——Python实现

    一.排序思想 排序思想参见:https://www.cnblogs.com/luomeng/p/10161794.html 二.python实现 def bubble_sort(nums): &quo ...

  3. 3、springboot之热部署

    我用的是idea 一.开启idea自动make功能 1.CTRL + SHIFT + A --> 查找make project automatically --> 选中 2.CTRL + ...

  4. 设计模式-单例模式下对多例的思考(案例:Server服务器)

    前述: 在学习单例模式后,对老师课上布置的课后作业,自然要使用单例模式,但是不是一般的单例,要求引起我的兴趣,案例是用服务器. 老师布置的要求是:服务器只有一个,但是使用这个服务器时候可以有多个对象( ...

  5. div居中方式

    1. position: absolute; top:50%:left: 50%; margin-top: -高度的一半; margin-left: -宽度的一半(此方法适用于固定宽高的元素) 注: ...

  6. 按需引入antd

    使用create-react-app创建项目的时候,官网推荐使用 babel-plugin-import 对antd 按需引入文件.但是配置文件在项目里没有. 可以直接在package.json里加上 ...

  7. C#性能优化实践(转载)

    原文地址http://www.infoq.com/cn/articles/C-sharp-performance-optimization?utm_source=infoq&utm_mediu ...

  8. idea maven打不了war包

    开发的时候打不了war包,原因是 web.xml有问题或者是在idea里面webroot没有作为web引用, 添加之后WebRoot上面有个地球标志 就ok了

  9. js 时间格式化 (兼容safari)

    js 时间格式化,兼容IE8和safari浏览器. function formatDate(date, fmt, near, type) { var dateStr = date; if (!date ...

  10. SQLSERVER 中GO的作用

    go 向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号.go是把t-sql语句分批次执行.(一步成功了才会执行下一步,即一步一个go) BEGIN 和 END 语句 ...