node + mysql 封装模块调用promise执行sql语句与存储过程

1.在根目录新建dbConfig.js 文件,封装自定义模块方便调用。

var mysql = require('mysql');

var databaseConfig = {
	host: '192.168.153.130',
	port: '3306',
	user: 'root',
	password: 'Data-20210413',
	database: 'wei'
};

//向外暴露方法
module.exports = {
	query: function(sql, params, callback) {
		//每次使用的时候需要创建链接,数据操作完成之后要关闭连接
		var connection = mysql.createConnection(databaseConfig);
		connection.connect(function(err) {
			if (err) {
				console.log('数据库链接失败');
				throw err;
			}
			//开始数据操作
			connection.query(sql, params, function(err, results, fields) {
				if (err) {
					console.log('数据操作失败');
					throw err;
				}
				//将查询出来的数据返回给回调函数,results作为数据操作后的结果,fields作为数据库连接的一些字段
				callback && callback(results, fields);
				
				//停止连接数据库,必须在查询语句后,要不然数据操作会失败
				connection.end(function(err) {
					if (err) {
						console.log('关闭数据库连接失败!');
						throw err;
					}
				});
			});
		});
	}
};

2.在根目录新建程序主文件 app.js

var express = require('express');   //引入express模块
var app = express();        //创建express的实例
var mysql = require('mysql');     //引入mysql模块

var db = require('./dbConfig'); //引入自定义模块
var str='';

//查询数据
app.get('/select',function (req,res) {
	db.query('select * from vv ',function(err,result){
		if(err){
			console.log(err)
			res.send('数据查询失败');
		}else{
			console.log(result)
			//数据库查询的数据保存在result中,但浏览器并不能直接读取result中的结果,因此需要用JSON进行解析
			str = JSON.stringify(result);
			res.send('数据查询成功:' + str);  //服务器响应请求
		}
	});    
});

//插入数据
app.get('/insert',function (req,res) {
	db.query('insert into vv(name) values("weiguo")',function(err,result){
		if(err){
			console.log(err)
			res.send('数据插入失败');
		}else{
			console.log(result)
			res.send('数据插入成功');  //服务器响应请求
		}		
	});    
});

app.listen(3000,function () {
    console.log('Server running at 3000 port');
});

3.cmd命令运行程序 :node app.js
在这里插入图片描述
4.打开浏览器输入相应的请求 ---- 127.0.0.1:3000/select 或者 127.0.0.1:3000/insert
在这里插入图片描述
在这里插入图片描述

5.后端数据结构
在这里插入图片描述

6.前端文件结构
在这里插入图片描述
***以下是用 promise 方法连接数据库执行sql语句,调用存储过程 ***

  • dbConfig.js 代码
var mysql = require('mysql')

//数据库配置
var pool = mysql.createPool({
	host: '127.0.0.1',
	port: '3306',
	user: 'root',
	password: 'roottoor',
	database: 'timetour'
})

//创建连接池
//此种方法能有效解决报错问题 Error: Connection lost The server closed the connection
var query = function(sql,options,callback){
    pool.getConnection(function(err,conn){
        if(err){
            callback(err,null,null);
        }else{
            conn.query(sql,options,function(err,results,fields){
                //事件驱动回调
                callback(err,results,fields);
            });
            //释放连接,需要注意的是连接释放需要在此处释放,而不是在查询回调里面释放
            conn.release();
        }
    })
}

//执行 sql 语句
var execSQL = function(sql) {
	const promise = new Promise((resolve,reject) =>{
		query(sql,(err,result) =>{
			if(err){
				reject(err)
				return
			}
			resolve(result)			
		})
	})	
	return promise	
}

//暴露方法给外部调用
module.exports = execSQL



  • app.js 代码
var express = require('express');   //引入express模块
var app = express();        //创建express的实例
var mysql = require('mysql');     //引入mysql模块
var execSQL = require('./dbConfig'); //引用自定义模块里面的方法

app.get('/select',function (req,res) {
    //let sqlStr = 'select * from vv'  //sql语句
	let uname = req.query.uname; //req.query 解析前端传递过来的数据
	let sqlStr = " call my_test( '" + uname + "' ) "  //调用存储过程 my_test 并传入参数	
	execSQL(sqlStr)
	.then(result => {
		console.log('查询成功',result)
		//数据库查询的数据保存在result中,但浏览器并不能直接读取result中的结果,因此需要用JSON进行解析
		let str = JSON.stringify(result);
		res.send('数据查询成功:' + str);  //服务器响应请求,把数据发送给前端
	})
	.catch(err =>{
		console.log('查询失败',err)
		res.send('数据查询失败')
	})
});

app.get('/insert',function (req,res) {
	let sqlStr = 'insert into vv(name) values("weiguo")'
	execSQL(sqlStr)
	.then(result => {
		console.log('增加成功',result)
		res.send('数据增加成功' );  //服务器响应请求,把数据发送给前端
	})
	.catch(err =>{
		console.log('增加失败',err)
		res.send('数据增加失败')
	})  
});

app.listen(3000,function () {
    console.log('Server running at 3000 port');
});

mysql 存储过程
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值