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 存储过程
在这里插入图片描述

おすすめ

転載: blog.csdn.net/weixin_38946164/article/details/116497262