nodejs同步mysql操作类

野生程序猿-杂烧5年前随意分享1017

nodejs越来越火了,打算稍微在深入学习一下,于是把php的mysql操作类库稍微改了一下,为了保留php思路,这里加入了同步的方法。简单测了一下,本地 没有问题,不知道同步在多人访问时候是否有坑,暂时先本地学习用着吧。

var mysql=require('mysql'); 
var deasync=require('deasync');

var db_mysql={
    connection:null
    ,config:{}
    ,init(config){
        this.config=config;
    }
    ,strtosql(value){
        
        try{
            if(typeof(value)=='undefined' )
            {
                var result='';
            }else{
                var result=value;
            }
        }catch(e){
            var result='';
        }

        result=result.replace(/\'/g,"''");
        result=result.replace(/\\/g,"\\\\");
        return result;
    }
    ,open(){
        this.connection = mysql.createConnection(this.config); 
        this.connection.connect();
    }

    ,close(){
        this.connection.end();
    }

    ,select_all(sql)
    {
        var me=this;
        var temp_select_all=deasync((sql,cb) => {
            me.open();
            me.connection.query(sql,function (err, result) {
                if(err){
                    var result=[];
                }
                me.close();
                //setTimeout(function(){
                    cb(null, result);
                //},500);
                
            });
    
        })

        return temp_select_all(sql);

    }


    ,select_one(sql)
    {
        var sql=sql+' limit 0,1';
        var this_result=this.select_all(sql);
        try{
            var result=this_result[0];
            if(!result)
            {
                var result={};
            }
        }catch(e){
            var result={};
        }
        return result;

    }


  
    ,select_onebyone(sql,key){
 
        var select_result=this.select_one(sql);
        try{
            var result=select_result[key];
            
            if(typeof(result)=='undefined' )
            {
                var result='';
            }
            
        }catch(e){
            var result='';
        }
      

        return result;
        

    }



    ,dosql(sql)
    {
        var me=this;
        var temp_dosql=deasync((sql,cb) => {
            me.open();
            me.connection.query(sql,[],function (err, result) {
                if(err){
                    var result=false;
                }else{
                    var result=true;
                }
                me.close();
                cb(null, result);
            });
    
        })

        return temp_dosql(sql);

    }

    ,havetab(tab_name)
	{

        var me=this;
        var sql=`select * from ${tab_name}`;
        var temp_havetab=deasync((sql,cb) => {
            me.open();
            me.connection.query(sql,function (err, result) {
                if(err){
                    var result=false;
                }else{
                    var result=true;
                }
                me.close();
                //setTimeout(function(){
                    cb(null, result);
                //},500);
                
            });
    
        })

        return temp_havetab(sql);
							   
    }
    
    ,havefield(tab_name,fieldname){
        var sql=`Describe ${tab_name} ${fieldname}`;
        var this_list=this.select_all(sql);
        if(this_list.length>0)
        {
            return true;
        }else{
            return false;
        }
    }

    ,myinsertsql(req,str,notin,gettype)
    {
        console.log(notin);
        if(!notin)
        {
            var notin=[];
        }
        if(!gettype)
        {
            var gettype='get';
        }
        var arr = str.split('|');
        var obj={};
        var obj_notin={};
        var arr_length=arr.length;
		var sql1_arr=[];
        var sql2_arr=[];
        
        for(var i in arr)
        {
            obj[arr[i]]=1;
        }
        for(var i in notin)
        {
            obj_notin[notin[i]]=1;
        }
        console.log(obj_notin);
		for(var key in obj)
		{
            if(obj_notin[key]!=1)
            {
                try{
                    if(gettype=="get")
                    {
                        var this_value=this.strtosql(req.query[key]);
                    }else{
                        var this_value=this.strtosql(req.body[key]);
                    }
                }catch(e){
                    var this_value='';
                }
 
                sql1_arr.push(key);
                sql2_arr.push(`'${this_value}'`);
            }
			
			
		}
		var sql1=sql1_arr.join(',');	
        var sql2=sql2_arr.join(',');
        var result=[sql1,sql2];

		return result;
    }

    ,myupsql(req,str,notin,gettype)
    {
        if(!notin)
        {
            var notin=[];
        }
        //console.log(notin);
        if(!gettype)
        {
            var gettype='get';
        }
        var arr = str.split('|');
        var obj={};
        var obj_notin={};
        var arr_length=arr.length;
		var sql1_arr=[];
        var sql2_arr=[];
        
        for(var i in arr)
        {
            obj[arr[i]]=1;
        }
        for(var i in notin)
        {
            obj_notin[notin[i]]=1;
        }
		for(var key in obj)
		{
            if(obj_notin[key]!=1)
            {
                try{
                    if(gettype=="get")
                    {
                        var this_value=this.strtosql(req.query[key]);
                    }else{
                        var this_value=this.strtosql(req.body[key]);
                    }
                }catch(e){
                    var this_value='';
                }
                var this_html=`${key}='${this_value}'`;
                sql1_arr.push(this_html);
               
            }
			
			
		}
		var sql1=sql1_arr.join(',');	

        var result=[sql1];

		return result;
    }

    ,showpage(req,sql,pagename,perpage=20,pernumber)
    {
        if(!pagename)
        {
            var pagename='pagenum';
        }
        if(!perpage)
        {
            var perpage=20;
        }
        if(!pernumber)
        {
            var pernumber=5;
        }

        var pageurl='';

        if(!req.query)
        {
            req.query={};
        }
        try{
            var page=req.query[pagename];
            if(typeof(page)=='undefined')
            {
                var page='';
            }
        }catch(e){
            var page='';
        }
		
		if (page=="")
		{
		page=1;
		}else{
		page=page*1;
		}

		//$perpage
		var start=perpage*(page-1);
		var end=perpage*page;
	

		var newsql=`${sql} limit ${start} ,${perpage}`;
		
        var numsql=`select count(*) as num from (${sql}) TAB_GG_UU_YY`;
        //console.log(numsql);
        var allnum=this.select_onebyone(numsql,'num');
        allnum=allnum*1;
        var allpagenum=Math.ceil(allnum/perpage);


        var query_arr=[];
        for(var i in req.query)
        {
            console.log(` ********  i -> ${i}`)
            if(i!=pagename)
            {
                var this_query=`${i}=${req.query[i]}`;
                query_arr.push(this_query);
            }
        }

        var get_page_url=function(query_arr,page)
        {
            if(query_arr.length>0)
            {
                pageurl='?'+query_arr.join('&')+`&${pagename}=${page}`;
            }else{
                pageurl='?'+`&${pagename}=${page}`;
            }
            return pageurl;
        }

        pageurl=get_page_url(query_arr,page);

        

        var shang_url=pageurl=get_page_url(query_arr,page-1);
        var xia_url=pageurl=get_page_url(query_arr,page+1);

        //上一页
        if(page>1)
        {
            var shang_html_layui=`<a href="${shang_url}" class="layui-laypage-prev" ><i class="layui-icon"></i></a>`;	
        }else{
            var shang_html_layui=`<a href="javascript:;" class="layui-laypage-prev layui-disabled" ><i class="layui-icon"></i></a>`;
        }

        //下一页
        if(page<allpagenum)
        {
            var xia_html_layui=`<a href="${xia_url}" class="layui-laypage-next" ><i class="layui-icon"></i></a>`;

        }else{
           
            var xia_html_layui='<a href="javascript:;" class="layui-laypage-next layui-disabled" ><i class="layui-icon"></i></a>';
         
        }


        //当中分页	
        var chaju=Math.ceil(pernumber/2);
        var startpage=page-pernumber+chaju;
        if(startpage<=0)
        {
        startpage=1;
        }
        var endpage=startpage+pernumber-1;
        if(endpage>allpagenum)
        {
            endpage=allpagenum;
            startpage=endpage-pernumber+1;
            if (startpage<=0)
            {
                startpage=1;
            }
        }

        var all_html="";
        var all_html_easyweb="";

		for(var index=startpage;index<=endpage;index++)
		{
			if(page!=index)
			{
				var this_url=get_page_url(query_arr,index);
                var all_html_easyweb=all_html_easyweb+`<a href='${this_url}' data-page='${index}'>{index}</a>`;
                var all_html_layui=all_html_layui+`<a href="${this_url}" >${index}</a>`;	
            }else{
                var all_html_easyweb=all_html_easyweb+`<span class='layui-laypage-curr'><em class='layui-laypage-em'></em><em>${index}</em></span>`;
                var all_html_layui=all_html_layui+`<span class="layui-laypage-curr"><em class="layui-laypage-em"></em><em>${index}</em></span>`;	
			}
		}
	
		//跳转页

        var tiao_zhuanurl_easyweb="";
		for(var index=1;index<=allpagenum;index++)
		{
            var this_url=get_page_url(query_arr,index);
            var this_selected="";
            if(index==page)
            {
                var this_selected=" selected='selected' ";
            }
            tiao_zhuanurl_easyweb=tiao_zhuanurl_easyweb+`<option value='${this_url}' ${this_selected}>第${index}页</option>`;

		}

        var tiao_zhuanurl_easyweb=` <span class='layui-laypage-limits'>共 ${allnum} 条</span><span class='layui-laypage-skip'>转到</span> <span class='layui-laypage-limits my_page_select'><select onchange='window.location=this.value;'>${tiao_zhuanurl_easyweb}</select></span>`;

		if(allnum==0)
		{
            var easyweb_pagehtml='<span class="layui-laypage-count">暂无数据</span>';
            
		}else{
            var easyweb_pagehtml=`${shang_html_layui} ${all_html_layui} ${xia_html_layui} ${tiao_zhuanurl_easyweb}`;
        }

        var result={
            sql:newsql
            ,allnum:allnum
            ,page:page
            ,allpagenum:allpagenum
            ,easyweb_pagehtml:easyweb_pagehtml
        };
        return result;
    }

};


module.exports = db_mysql;


标签: nodejsmysql

相关文章

python小网站开发

看了前面讲的开发分段,开发小网站其实需要到的知识点不太多,有其他语言基础的基本可以直接上手。【views.py】""" 从module里 取方法,直接把数据提...

强迫症犯了_重命名

文件夹里的文件命名是这样的,1.mp4,2.mp4,...,999.mp4 看着不舒服,我喜欢 001.mp4,002.mp4,003.mp4。很多播放软件 1后面是11、12排序的。于是通过node...

h5的横屏适配

h5的横屏适配

最近遇到一个问题,我们开发的软件是横屏软件,因客户群体主要是学校,就是使用者是老师和学生。本来软件设计的是电脑机房里用,现在学校希望手机也可以用。结果手机用起来就是这个现象。老师提意见,说字太小看不清...

GPS经纬度坐标系转换【python版】

再补充个python版的gps经纬度坐标系,在脚本处理数据的时候python,nodejs要比php性能好很多。尤其是他们更擅长多线程# -*- coding: UTF-...

再谈面向过程编程,工序再到时序

再谈面向过程编程,工序再到时序

先看一个需求,这个是教学软件的一个环节。进入机场哪些东西能带哪些东西不能带?哪些东西放在行李箱托运?哪些放在包里随身携带?教学软件一般是带有互动的,有时序的概念。1、时序开始,先是导学说话。2、用户开...

如何判断一个经纬度是哪个省?

需求是这样的,有个卖gps防盗器的公司,需要分析出用户去年一年内经过了那些城市?假设有10万个用户,每个用户有100万个轨迹点。我们怎么分析呢?常规方法是一个点一个点的分析,那就是10w*100w=1...