打通前后端——node连接mysql数据库

打通前后端——node连接mysql数据库,第1张

文章结构 mysql 连接数据库mysql的驱动说明mysql连接的配置信息封装mysql的语句执行方法query的两种查询获取受影响的行数获取更改的行数多语句查询事务Exception Safety 类型重铸 具体 *** 作演示后端路由文件数据库配置文件封装mysql查询函数启动项目查看数据库浏览器/postman调用

mysql 连接数据库mysql的驱动说明
mysql的兼容升级npm包mysql2,mysql2兼容mysql的api语法。使用起来没有太大的
差别,但是mysql2在性能上面提升很大

mysql npm地址与文档地址

我们从文档中提取一点重点

mysql连接的配置信息
// db.config.js
// 创建mysql连接
module.exports = {
    host: 'localhost', // 服务器地址
    user: '******', // mysql用户名称
    password: '******', // mysql用户密码
    port: '3306', // 端口
    database: 'todolist', // 数据库名称
}
封装mysql的语句执行方法
// db.js 
const mysql = require('mysql2');
const dbConfig = require('./db.config');

module.exports = {
    query: function(sql, params, callback) {
        //每次使用的时候需要创建链接,数据 *** 作完成之后要关闭连接
        const connection = mysql.createConnection(dbConfig)
        connection.connect(function(err) {
            if (err) {
                throw err
            }
            //开始数据 *** 作
            connection.query(sql, params, function(err, results, fields) {
                if (err) {
                    throw err
                }
                //将查询出来的数据返回给回调函数
                callback &&
                    callback(
                        results ? JSON.parse(JSON.stringify(results)) : null,
                        fields ? JSON.parse(JSON.stringify(fields)) : null
                    )
                    //停止链接数据库,必须在查询语句后,要不然一调用这个方法,就直接停止链接,数据 *** 作就会失败
                connection.end(function(err) {
                    if (err) {
                        console.log('关闭数据库连接失败!')
                        throw err
                    }
                })
            })
        })
    },
}
router.get('/userList', (req, res, next) => {
    // sql查询user表
    db.query('select * from list', [], function(results, fields) {
        // 以json的形式返回
        res.json({ results })
    })
})
query的两种查询
connection.query('SELECT * FROM `books` WHERE `author` = "David"', function (error, results, fields) {
  // error will be an Error if one occurred during the query
  // results will contain the results of the query
  // fields will contain information about the returned results fields (if any)
});
connection.query('SELECT * FROM `books` WHERE `author` = ?', ['David'], function (error, results, fields) {
  // error will be an Error if one occurred during the query
  // results will contain the results of the query
  // fields will contain information about the returned results fields (if any)
});
获取受影响的行数
// 您可以从插入、更新或删除语句中获取受影响的行数。
connection.query('DELETE FROM posts WHERE title = "wrong"', function (error, results, fields) {
  if (error) throw error;
  console.log('deleted ' + results.affectedRows + ' rows');
})
获取更改的行数
您可以从更新语句中获取更改的行数。“changedRows”与“affectedRows”的不同之处在于它不计算值未更改的更新行。
connection.query('UPDATE posts SET ...', function (error, results, fields) {
  if (error) throw error;
  console.log('changed ' + results.changedRows + ' rows');
})
多语句查询
// 句查询会被SQL注入,如果确定想使用可以开启
var connection = mysql.createConnection({multipleStatements: true});
事务
// 开启一个简单的事务
connection.beginTransaction(function(err) {
  if (err) { throw err; }
  connection.query('INSERT INTO posts SET title=?', title, function (error, results, fields) {
    if (error) {
      return connection.rollback(function() {
        throw error;
      });
    }
 
    var log = 'Post ' + results.insertId + ' added';
 
    connection.query('INSERT INTO log SET data=?', log, function (error, results, fields) {
      if (error) {
        return connection.rollback(function() {
          throw error;
        });
      }
      connection.commit(function(err) {
        if (err) {
          return connection.rollback(function() {
            throw err;
          });
        }
        console.log('success!');
      });
    });
  });
});
Exception Safety 类型重铸
为方便起见,默认情况下,此驱动程序会将 mysql 类型转换为原生 JavaScript 类型。
mysqljavascript
TINYINTNumber
SMALLINTNumber
INTNumber
MEDIUMINTNumber
YEARNumber
FLOATNumber
DOUBLENumber
TIMESTAMPDate
DATEDate
DATETIMEDate
TINYBLOBBuffer
MEDIUMBLOBBuffer
LONGBLOBBuffer
BLOBBuffer
BINARYBuffer
VARBINARYBuffer
BIT (last byte will be filled with 0 bits as necessary)Buffer
charString
varcharString
tinytextString
mediumtextString
longtextString
textString
enumString
setString
decimalString
bigintString
timeString
geometryString
具体 *** 作演示
使用express-generator来快速搭建一个项目

简单了解一下express-generator

后端路由文件
var express = require('express');
var router = express.Router();
const db = require('../conf/db');

/* GET home page. */
router.get('/', function(req, res, next) {
    res.send("123")
});

router.get('/userList', (req, res, next) => {
    // sql查询user表
    db.query('select * from list', [], function(results, fields) {
        // 以json的形式返回
        res.json({ results })
    })
})
module.exports = router;

数据库配置文件
// db.config.js
// 创建mysql连接
module.exports = {
    host: 'localhost', // 服务器地址
    user: '******', // mysql用户名称
    password: '******', // mysql用户密码
    port: '3306', // 端口
    database: 'todolist', // 数据库名称
}

封装mysql查询函数
// db.js 
const mysql = require('mysql2');
const dbConfig = require('./db.config');

module.exports = {
    query: function(sql, params, callback) {
        //每次使用的时候需要创建链接,数据 *** 作完成之后要关闭连接
        const connection = mysql.createConnection(dbConfig)
        connection.connect(function(err) {
            if (err) {
                throw err
            }
            //开始数据 *** 作
            connection.query(sql, params, function(err, results, fields) {
                if (err) {
                    throw err
                }
                //将查询出来的数据返回给回调函数
                callback &&
                    callback(
                        JSON.parse(JSON.stringify(results)),
                        JSON.parse(JSON.stringify(fields))
                    )
                    //停止链接数据库,必须在查询语句后,要不然一调用这个方法,就直接停止链接,数据 *** 作就会失败
                connection.end(function(err) {
                    if (err) {
                        console.log('关闭数据库连接失败!')
                        throw err
                    }
                })
            })
        })
    },
}

启动项目


查看数据库

浏览器/postman调用
因为是get请求,其实可以直接在浏览器中调用,但是postman功能更丰富。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/991088.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-21
下一篇2022-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存