使用nodejs连接mysql数据库

使用nodejs连接mysql数据库

月光魔力鸭

2018-09-12 10:10 阅读 1806 喜欢 0 nodejs mysql

使用nodejs 连接mysql数据库还是很简单的,有现成的模块可以直接调用。下面介绍下 mysql 的调用。

mysql 模块

使用模块mysql 异步处理async

定义mysql 配置
var config = {
	mysql :  {
		host : '127.0.0.1',
		port : '3306',
		user : 'root',
		password : 'root',
		database : 'picconvert'
	}
};
module.exports = config;
定义一个常用的mysql调用的工具类
 var mysql = require('mysql');

var config = require('../config/config');

var async = require('async');
// 使用连接池,提升性能
// var pool  = mysql.createPool($util.extend({}, $conf.mysql));
var pool  = mysql.createPool(config.mysql);

//1. 执行语句返回结果
var onebyone = function(list,callback){
    if(!list.length){
        list = [list];
    }
    return new Promise(function(resolve,reject){
        pool.getConnection(function (err, connection) {
            if (err) {
                reject(err);
            }
            connection.beginTransaction(function (err) {
                if (err) {
                    reject(err);
                }
                var funcAry = [];
                list.forEach(function (sql_param) {
                    var temp = function (cb) {
                        var sql = sql_param.sql;
                        var param = sql_param.params;
                        connection.query(sql, param||[], function (tErr, rows, fields) {
                            if (tErr) {
                                connection.rollback(function () {
                                    throw tErr;
                                });
                            } else {
                                cb(null,rows);
                            }
                        })
                    };
                    funcAry.push(temp);
                });

                async.parallel(funcAry, function (err, result) {
                    if (err) {
                        connection.rollback(function (err2) {
                            connection.release();
                            // connection.destroy();\
                            reject(err2);
                        });
                    } else {
                        connection.commit(function (err2, info) {
                            if (err2) {
                                console.log("执行事务失败," + err2);
                                connection.rollback(function (err3) {
                                    connection.release();
                                    // connection.destroy();
                                    reject(err3);
                                });
                            } else {
                                connection.release();
                                // connection.destroy();
                                resolve(result);
                            }
                        })
                    }
                });
            });
        }); 
    });
   
};

module.exports = onebyone;

上面可以执行多条sql 同步执行,然后获得返回结果进行处理。

如何调用
/**
操作attach表,修改数据
**/

var query = require('../lib/sql');

var sqls = {
	uploadOne : 'insert into attach (filePath,ip,browser,createTime,filedel,type) values (?,?,?,?,?,?) ',
	successOne : 'update attach set filedel=?,type=? where id=? ',
	failOne : 'update attach set filedel=1,type=0 where id=? ',
	getById : 'select * from attach where id=? ',
	getLastData : 'select * from attach where createTime <= date_sub(now(),interval 5 minute) and filedel=0',
	updateNewPath : 'update attach set targetPath=? where id=? '
};

module.exports = {
	/**
	 * 上传一个新的图片文件,插入数据库
	 **/
	uploadOne : function( data ){
		var list = {
			sql : sqls.uploadOne,
			params : [data.filePath,data.ip,data.browser,new Date(),0,0]
		};
		return query(list);
	},
	/***
  	 * 将文件处理完毕并成功下载,
  	 * 1.更新删除状态
  	 * 2.更新处理状态
	 **/
	successOne : function( id ){
		var list = {
			sql : sqls.successOne,
			params : [1,1,id]
		};
		return query(list);
	},
	/***
	 * 删除或替换
	 *
	 ***/
	failOne : function( id ,cb ){
		var list = {
			sql : sqls.failOne,
			params : [id]
		};
		return query(list);
	},
	/***
	 * 根据ID获得信息
	 *
	 ***/
	getById : function( id ){
		var list = {sql : sqls.getById,params : [id]};
		return query(list);
	},
	/***
	 * 获得距离当前5分钟之前的未处理的数据,并将对应的数据清空
	 **/
	getLastData : function(){
		var list = {
			sql : sqls.getLastData,
			params : []
		};
		return query(list);
	},
	/**
	 * 更新新的文件路径
	 ***/
	updateNewPath : function(id,newPath){
		var list = {
			sql : sqls.updateNewPath,
			params : [newPath,id]
		};
		return query(list);
	}
};

直接定义sql语句,然后通过工具类调用查询数据并返回。 工具类中还用了promise,对promise还不熟悉,正在学习实践中... 以上就是通过nodejs 连接 mysql数据库的过程.. 目前在各种自学中.. 期待共同提高~大神请轻拍..

转载请注明出处: https://chrunlee.cn/article/mysql-nodejs-connect.html


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
在我们做运维或者小工具的时候,总会有些需要提醒的事情,比如服务器宕机或者天气提醒,但是发email又会不够及时或者可能会忽略,那么短信就是一个不错的选择了
这事其实很简单,就是调用adb几个命令而已.. 主要是有时候想用的时候总感觉差点啥,东拼西凑才弄出来,这里记录下,哪怕就是贴个地址的,也比记在脑子里强。
当我们做爬虫或其他的一些应用的时候,如果需要一些短信验证,但是又没有那么多手机号,又不能放人在那里一直输入的时候?怎么办?
学习爬虫的时候突然有想到想做一个音乐播放小站,可以给自己或朋友听,但是音乐哪里来呢??想到自己常听的豆瓣FM,就越发的想把这些音乐都拿下来,因此有了下文通过豆瓣FM批量抓取上万首音乐,目前已经3W+。
前几天给朋友帮忙,想要一个一模一样的网站...自告奋勇去帮忙.. 结果发现之前一直没处理过类似的情况,虽然也写过爬虫,不过看了下网站,也不算麻烦。于是简单实现了这个自动抓站的功能,最终整理成为一个自动抓站的工具,能省很多的事情。
使用nodejs连接ftp,进行ftp的操作,包括列表、上传、下载以及速率等。
在平时nodejs练习过程中,可能会安装多个不同版本的nodejs,那么我们如何来轻松的管理和切换呢?推荐你一个nvm来试试水
关于js的编译和压缩,之前做过一个小工具了,主要就是自己项目成员大都没有这部分的技能,导致发布的时候总需要去编译压缩下.. 最终做了个命令行小工具.. 问题不在这里,前一阵子做压缩的时候发现压缩后竟然是undefined.最终才发现是es6的语法问题。