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 存储过程