0


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

文章结构

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(JSON.parse(JSON.stringify(results)),JSON.parse(JSON.stringify(fields)))//停止链接数据库,必须在查询语句后,要不然一调用这个方法,就直接停止链接,数据操作就会失败
                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 类型。

mysqljavascriptTINYINTNumberSMALLINTNumberINTNumberMEDIUMINTNumberYEARNumberFLOATNumberDOUBLENumberTIMESTAMPDateDATEDateDATETIMEDateTINYBLOBBufferMEDIUMBLOBBufferLONGBLOBBufferBLOBBufferBINARYBufferVARBINARYBufferBIT (last byte will be filled with 0 bits as necessary)BuffercharStringvarcharStringtinytextStringmediumtextStringlongtextStringtextStringenumStringsetStringdecimalStringbigintStringtimeStringgeometryString

具体操作演示

使用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("<h1>123</h1>")});

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功能更丰富。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标签: 前端 node.js mysql

本文转载自: https://blog.csdn.net/weixin_44242181/article/details/124439756
版权归原作者 王元肉 所有, 如有侵权,请联系我们删除。

“打通前后端&mdash;&mdash;node连接mysql数据库”的评论:

还没有评论