广告
返回顶部
首页 > 资讯 > 数据库 >Node.js 连接 mysql 数据库
  • 848
分享到

Node.js 连接 mysql 数据库

mysql数据库node.js 2023-09-09 17:09:54 848人浏览 八月长安
摘要

目录 一、安装驱动 二、连接数据库 1、数据库连接的配置信息 数据库连接参数说明 2、封装 mysql 的执行语句 3、后端路由文件  三、数据库操作( CURD ) 1、查询数据 2、插入数据 3、更新数据 4、删除数据 4、获取受影响的

目录

一、安装驱动

二、连接数据库

1、数据库连接的配置信息

数据库连接参数说明

2、封装 mysql 的执行语句

3、后端路由文件 

三、数据库操作( CURD )

1、查询数据

2、插入数据

3、更新数据

4、删除数据

4、获取受影响的行数

5、获取更改的行数

6、多语句查询

7、事务

四、Exception Safety 类型重铸

五、具体操作演示

入口文件

后端路由文件

数据库配置文件 

封装 mysql 查询函数

启动项目

六、查看数据库

七、调用接口

参考文档


一、安装驱动

npm install Mysql
npm install --save mysql2

mysql的兼容升级npm包mysql2,mysql2兼容mysql的api语法。

使用起来没有太大的差别,但是mysql2在性能上面提升很大。

 

二、连接数据库

1、数据库连接的配置信息

// db.config.js// 数据库连接配置module.exports = {mysql: {host: 'localhost', // 主机地址 (默认:localhost)user: 'root', // 数据库用户名passWord: 'root', // 数据库密码database: 'schoolmarket', // 数据库名port: '3306' // 端口号 (默认:3306)}}

数据库连接参数说明

参数描述
host主机地址 (默认:localhost)
  user用户名
  password密码
  port端口号 (默认:3306)
  database数据库名
  charset连接字符集(默认:'UTF8_GENERAL_CI',注意字符集的字母都要大写)
  localAddress此IP用于tcp连接(可选)
  SocketPath连接到unix域路径,当使用 host 和 port 时会被忽略
  timezone时区(默认:'local')
  connectTimeout连接超时(默认:不限制;单位:毫秒)
  stringifyObjects是否序列化对象
  typeCast是否将列值转化为本地javascript类型值 (默认:true)
  queryFORMat自定义query语句格式化方法
  supportBigNumbers数据库支持bigint或decimal类型列时,需要设此option为true (默认:false)
  bigNumberStringssupportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回(默认:false)
  dateStrings强制timestamp,datetime,data类型以字符串类型返回,而不是JavaScript Date类型(默认:false)
  debug开启调试(默认:false)
  multipleStatements是否许一个query中有多个MySQL语句 (默认:false)
  flags用于修改连接标志
  ssl使用ssl参数(与crypto.createCredenitals参数格式一至)或一个包含ssl配置文件名称的字符串,目前只捆绑Amazon RDS的配置文件

 

2、封装 mysql 的执行语句

// db.js// 使用mysql2const mysql = require('mysql2');// 引入mysql配置文件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                    }                })            })        })    },}

3、后端路由文件 

// 引入数据库封装对象var db = require('./db.js');// 引入express包var express = require('express');//创建路由器对象var router = express.Router();// 配置路由对象router.get('/userList', (req, res, next) => {    // sql查询user表    db.query('select * from list', [], function(results, fields) {        // 以json的形式返回        res.json({ results })    })})

 

三、数据库操作( CURD )

1、查询数据

connection.query('SELECT * FROM `books` WHERE `author` = "David"', function (error, results, fields) {       if(error){          console.log('[SELECT ERROR] - ',error.message);          return;       }        console.log('--------------------------SELECT----------------------------');       console.log(results);       console.log('------------------------------------------------------------\n\n');  });
connection.query('SELECT * FROM `books` WHERE `author` = ?', ['David'], function (error, results, fields) {       if(error){          console.log('[SELECT ERROR] - ',error.message);          return;       }        console.log('--------------------------SELECT----------------------------');       console.log(results);       console.log('------------------------------------------------------------\n\n');  });

2、插入数据

var  addSql = 'INSERT INTO WEBsites(Id, name, url, alexa, country) VALUES(0,?,?,?,?)';var  addSqlParams = ['菜鸟', 'https://xxx.com','23453', 'CN'];// 执行插入数据connection.query(addSql,addSqlParams,function (err, result) {        if(err){         console.log('[INSERT ERROR] - ',err.message);         return;        }                console.log('--------------------------INSERT----------------------------');       //console.log('INSERT ID:',result.insertId);               console.log('INSERT ID:',result);               console.log('-----------------------------------------------------------------\n\n');  });

3、更新数据

var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?';var modSqlParams = ['菜鸟', 'Https://xxx.com', 6];// 更新数据connection.query(modSql,modSqlParams,function (err, result) {  if(err){      console.log('[UPDATE ERROR] - ',err.message);      return;  }          console.log('--------------------------UPDATE----------------------------');  console.log('UPDATE affectedRows', result.affectedRows);  console.log('-----------------------------------------------------------------\n\n');});

4、删除数据

var delSql = 'DELETE FROM websites where id=6';// 删除数据connection.query(delSql, function (err, result) {        if(err){          console.log('[DELETE ERROR] - ',err.message);          return;        }                console.log('--------------------------DELETE----------------------------');       console.log('DELETE affectedRows', result.affectedRows);       console.log('-----------------------------------------------------------------\n\n');  });

4、获取受影响的行数

// 从插入、更新或删除语句中获取受影响的行数connection.query('DELETE FROM posts WHERE title = "wrong"', function (error, results, fields) {  if (error) throw error;  console.log('deleted ' + results.affectedRows + ' rows');})

5、获取更改的行数

// 从更新语句中获取更改的行数// changedRows与affectedRows的不同之处在于,值未更改的更新行不被列入changedRowsconnection.query('UPDATE posts SET ...', function (error, results, fields) {  if (error) throw error;  console.log('changed ' + results.changedRows + ' rows');})

6、多语句查询

// 多语句查询会被SQL注入,如果确定想使用可以开启var connection = mysql.createConnection({    multipleStatements: true});

7、事务

// 开启一个简单的事务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
SMALLINT
INT
MEDIUMINT
YEAR
FLOAT
DOUBLE
TIMESTAMPDate
DATE
DATETIME
TINYBLOBBuffer
MEDIUMBLOB
LONGBLOB
BLOB
BINARY
VARBINARY
BIT (last byte will be filled with 0 bits as necessary)
charString
varchar
tinytext
mediumtext
longtext
text
enum
set
decimal
bigint
time
geometry

五、具体操作演示

使用 express-generator 来快速搭建一个项目
 

入口文件

// index.jsconst userApi = require('./api/myApi');const fs = require('fs');const path = require('path');// body-parser - node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据const bodyParser = require('body-parser');// 引入express包const express = require('express');// 创建web服务器const app = express();app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended: false}));// 后端api路由app.use('/api/user', userApi);// 监听端口app.listen(3000);console.log('success listen at port: 3000......');

后端路由文件

// api.js// 引入封装 mysql 查询函数var db = require('./db');// 引入express包var express = require('express');// 创建路由器对象var router = express.Router();// Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件var multer = require('multer');// 格式化时间模块Silly-datetimevar datetime = require('silly-datetime');var fs = require('fs');var path = require('path')var UUID = require('uuid')// multer 自定义存储的方式var storage = multer.diskStorage({      // 保存路径    destination: function (req, file, cb) {        // 注意这里的文件路径,不是相对路径,直接填写从项目根路径开始写就行了        cb(null, 'static/public/uploads')      },      // 保存在 destination 中的文件名    filename: function (req, file, cb) {          var str = file.originalname.split('.');          cb(null, UUID.v1() + '.' + str[1]);      }  })var upload = multer({storage: storage})// 设置返回responsevar jsonWrite = function (res, ret) {    if (typeof ret === 'undefined') {        res.json({            code: '1',            msg: '操作失败'        });    } else {        console.log('ret', ret)        res.json(ret);    }};// 增加用户接口router.post('/addUser', (req, res) => {  let params = req.body;  db.query("select * from user where user_id=?", [params.id], function (err, result) {    if (err) {      console.log(err);    }    if (result) {      if (result.length > 0) {        jsonWrite(res, {          code: -1,          msg: '该账号已注册!'        });      } else {        db.query("INSERT INTO user(user_id,user_nick,gender,password) VALUES(?,?,?,?)", [params.id, params.nick, params.gender, params.password], function (err, result) {          if (err) {            console.log(err);          }          if (result) {            jsonWrite(res, {              code: 200,              msg: '注册用户成功!'            });          }        })      }    }  })});

数据库配置文件 

// db.config.js// 数据库连接配置module.exports = {mysql: {host: 'localhost', // 主机地址 (默认:localhost)user: 'root', // 数据库用户名password: 'root', // 数据库密码database: 'schoolmarket', // 数据库名port: '3306' // 端口号 (默认:3306)}}

封装 mysql 查询函数

// db.js// 使用mysql2const mysql = require('mysql2');// 引入mysql配置文件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                    }                })            })        })    },}

 

启动项目

server是入口文件 index.js 的文件夹的名字

node server

六、查看数据库

可以使用 navicat premium 等数据库可视化工具进行查看操作数据库。

七、调用接口

可以使用浏览器或 postman 来调用接口查看返回的情况。

参考文档

Node.js 连接 MySQL | 菜鸟教程

mysql - npm

mysql2 - npm

来源地址:https://blog.csdn.net/qq_31851435/article/details/130724518

您可能感兴趣的文档:

--结束END--

本文标题: Node.js 连接 mysql 数据库

本文链接: https://www.lsjlt.com/news/401725.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Node.js 连接 mysql 数据库
    目录 一、安装驱动 二、连接数据库 1、数据库连接的配置信息 数据库连接参数说明 2、封装 mysql 的执行语句 3、后端路由文件  三、数据库操作( CURD ) 1、查询数据 2、插入数据 3、更新数据 4、删除数据 4、获取受影响的...
    99+
    2023-09-09
    mysql 数据库 node.js
  • Node.js中怎么连接MySQL数据库
    Node.js中怎么连接MySQL数据库,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。什么是关系型数据库和非关系型数据库说到关系型数据库,...
    99+
    2022-10-19
  • Node.js数据库操作之连接MySQL数据库(一)
    介绍 首先说来介绍一下MySQL(非广告)。MySQL是由瑞典的MySQL AB公司开发,后来被甲骨文公司收购。和Oracle一样,MySQL是一个典型的关系型数据库,在百度百科中,把MySQL称为是最好的...
    99+
    2022-06-04
    数据库 操作 Node
  • 如何在 Node.js 中连接 MySQL 数据库
    在现代的 Web 开发中,数据存储和管理是不可或缺的一部分。MySQL 是一个流行的开源关系型数据库管理系统,而 Node.js 是一个基于事件驱动、非阻塞 I/O 的 JavaScript 运行时环...
    99+
    2023-10-18
    数据库 node.js mysql
  • mysql 连接数据库
    1、首先启动mysql 并链接数据 小意思吧!都会了是吧    mysql -uroot -p //连接数据    net start mysql /...
    99+
    2022-05-21
    连接数据库 mysql
  • Node.js实现连接mysql数据库功能示例
    本文实例讲述了Node.js实现连接mysql数据库功能。分享给大家供大家参考,具体如下: Node.js连接数据库前,需要安装相应的包,如果安装sql server 需要先装包node-sqlserver...
    99+
    2022-06-04
    示例 功能 数据库
  • python连接MySQL数据库
    模块功能:connect()方法 * connect()方法用于连接数据库,返回一个数据库连接对象。如果要连接一个位于host.remote.com服务器上名为fourm的MySQL数据库,连接串可以这样写: ...
    99+
    2023-01-31
    数据库 python MySQL
  • JSP连接MySQL数据库
    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:JAVA开发者成长之路 ✨...
    99+
    2023-08-16
    java mysql tomcat
  • Python3 连接Mysql数据库
    初学Python ,目前无论是电子书还是网上的教程,都是针对于python2.7,但是对于部分语法以及模块都有变化。比如urllib2是python自带的模块,不需要下载。urllib2在python3.x...
    99+
    2022-10-18
  • php连接mysql数据库
        连接数据库:使用面向对象的方法;1.造一个mysqli对象,造连接对象2.准备一条SQL语句3.执行SQL语句,如果是查询语句。成功返回结果及对象4.从结果集...
    99+
    2022-10-18
  • jdbc连接MySql数据库
    jdbc连接MySql数据库 package com.zhy; import com.mysql.jdbc.Driver; import java.sql.*; public class TestJdbc { publi...
    99+
    2020-09-18
    jdbc连接MySql数据库 数据库入门 数据库基础教程 数据库 mysql
  • python3连接MySQL数据库
    环境:python 3.6.1 + mysql 5.1 Python3 支持用 pymysql 模块来链接数据库 1、pymysql安装 windows下:pip install pymysql 直接安装 官方文档:http://...
    99+
    2023-01-31
    数据库 MySQL
  • idea连接MySQL数据库
    文章目录 前言一、idea创建连接MySQL操作步骤 二、配置连接参数操作步骤 总结 前言 提示:idea连接数据库前,先需要查看自己数据库安装、配置是否完成: 1.打开mysql命令控制台 2.输入密码,到如下页面...
    99+
    2023-08-17
    mysql intellij-idea 数据库
  • C#连接MySQL数据库
    目录 一、引用MySql.Data.dll文件 二、连接、关闭数据库 三、数据库增删改查 附:完整代码 一、引用MySql.Data.dll文件 创建C#窗体应用程序,解决方案资源管理器中找到“引用”,右键,选择添加引用。 在MyS...
    99+
    2023-10-28
    c# 数据库 mysql
  • Python 连接 MySQL 数据库
    在实际数据分析和建模过程中,我们通常需要从数据库中读取数据,并将其转化为 Pandas dataframe 对象进行进一步处理。而 MySQL 数据库是最常用的关系型数据库之一,因此在 Python 中如何连接 MySQL 数据库并查询数据...
    99+
    2023-08-16
    python
  • Java连接mysql数据库
    文章目录 一、Java连接mysql数据库1.1 流程1.2 一个测试连接的java程序 二、优化:创建一个工具类2.1 存在的问题2.2 创建配置文件和工具类2.3 测试使用工具类进行CRUD操作 三、SQL注入问题3.1...
    99+
    2023-08-16
    数据库 mysql java jdbc sql注入
  • C# 连接 MySQL 数据库
    目录 一、需求 二、新建 C# 项目 三、MySQL数据库 四、MySqlHelper 五、测试 一、需求 C# 使用 MySQL 数据库的情况还是比较少的,大部分使用 Windows 平台一般使用 SQL Server,在两年前我...
    99+
    2023-09-02
    c# 数据库
  • c++ 连接mysql数据库
            使用vs2019对window11中的数据库进行连接 1. 配置连接环境         首先需要把mysql中的头文件和库文件放入到c++项目工程中 打开安装MySQL的目录,在windows系统中如果是默认路径,应该和我...
    99+
    2023-09-03
    数据库
  • node.js平台下的mysql数据库配置及连接
    首先下载mysql模块包 npm install mysql --save-dev 专门为数据库创建一个模块,放入一个文件中。 var mysql=require("mysql"); exports.c...
    99+
    2022-06-04
    数据库 平台 node
  • 关于node+mysql数据库连接池连接
     mysql有两种连接方式:一种是直接连接 另一种是池化连接,我们这篇讲的是池化连接。 为了让解惑,我简答的写份直接连接的代码,如下: var mysql = requi...
    99+
    2023-05-16
    node+mysql node连接mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作