Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >nodejs操作mysql数据库

nodejs操作mysql数据库

作者头像
OECOM
发布于 2020-07-01 09:14:26
发布于 2020-07-01 09:14:26
2.2K00
代码可运行
举报
文章被收录于专栏:OECOMOECOM
运行总次数:0
代码可运行

nodejs是一个运行在服务器端的JavaScript框架,既然是在服务器端运行,就少不了需要操作数据库。在nodejs中提供了一个基本的mysql模块,同时本示例也采用mysql作为例子。

首先要做的就是安装mysql模块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install mysql -S

然后就是先创建一个数据库,名字暂时起为:nodejs,然后在里面新建一张表,表名为user,表结构如下图所示

至此,准备工作已经完成。接下来要做的就是在程序里进行配置,链接数据库,封装操作方法。

首先,新建一个mysql.js文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var mysql = require('mysql');
var config = require('./config');
var pool = mysql.createPool({
    host: config.mysqlHost,
    user: config.mysqlUser,
    password: config.mysqlPassword,
    database: config.mysqlDatabase,
    port: config.mysqlPort,
    charset:"UTF8MB4_GENERAL_CI"
});

我这里的配置信息写在了一个配置文件里,里面报错了数据库主机密码相关信息。在上面的代码示例中我们已经完成了数据库链接池的配置,接下来进行方法的封装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/读查询
exports.query = function query(sql, callback){

    pool.getConnection(function(err, conn){
        if(err){
            callback(err, null, null);
        }else{
            conn.query(sql, function(qerr, vals, fields){
                conn.release();//释放连接
                callback(qerr, vals, fields); //事件驱动回调
            });
        }
    });
};

这是一个简单的方法封装,用于查询使用,因为查询基本上不涉及到数据库事务,所以不存在数据回滚的现象,我们再来看一下基本的使用情况。比如一个简单的登录吧:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
router.get('/login',function (req,res){
var response = {
            success:false,
            errormsg:"查询失败"
        }
try{
        var params = url.parse(req.url, true).query;
        var userName = params.userName;
        var password = params.password;

        var pattern = /["'=]+/;
        if(pattern.test(userName)){
        //在这里进行非法共计的校验,以防sql注入
            response.errormsg = "非法攻击";
            res.json(response);
        }
        var sql = 'select * from user where userName = "'+userName+'" and password="'+password+'"';
        console.log(sql);
        mysql.query(sql,function(err,result,fildes){
            if(err){
                     console.log("login:" + JSON.stringify(err));
                     res.json(response);
            }else{
                console.log(result);
                 if (result.length == 0) {
                    response.errormsg = "无此人信息";
                     res.json(response);
                 }else{
                    response.success = true;
                    response.errormsg = "查询成功";
                    res.json(response);
                 }
            }
        })
    }catch(e){
        res.json(response);
    }
});

在此需要介绍一下,connection.query有两种写法,一个是上面的方法,直接写全sql语句,另一种写法是后面跟参数,比如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var modsql = 'UPDATE user SET name = ?,age = ? WHERE id = ?';
var modsqlparams = ['吕雪源love','26','1'];
connection.query(modsql,modsqlparams,function (err,result) {
//内部操作
})

个人还是比较建议将sql写全然后直接执行。具体的sql语句写法可以自己学习数据库相关的知识。之后我们说一下nodejs中事务的用法。下方示例代码还是写在了mysql.js文件中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exports.execTrans = function execTrans(sqlparamsEntities, callback) {
//sqlparamsEntities是一个数组,里面包含了需要在事务中执行的sql语句
  pool.getConnection(function (err, connection) {
    if (err) {
      return callback(err, null);
    }
    connection.beginTransaction(function (err) {
      if (err) {
        return callback(err, null);
      }
      console.log("开始执行transaction,共执行" + sqlparamsEntities.length + "条数据");
      var funcAry = [];
      sqlparamsEntities.forEach(function (sql) {
        var temp = function (cb) {
          connection.query(sql, function (tErr, rows, fields) {
            if (tErr) {
              connection.rollback(function () {
                console.log("事务失败," + sql + ",ERROR:" + tErr);
                throw tErr;
              });
            } else {
              return cb(null, 'ok');
            }
          })
        };
        funcAry.push(temp);
      });
 
      async.series(funcAry, function (err, result) {
        console.log("transaction error: " + err);
        if (err) {
          connection.rollback(function (err) {
            console.log("transaction error: " + err);
            connection.release();
            return callback(err, null);
          });
        } else {
          connection.commit(function (err, info) {
            console.log("transaction info: " + JSON.stringify(info));
            if (err) {
              console.log("执行事务失败," + err);
              connection.rollback(function (err) {
                console.log("transaction error: " + err);
                connection.release();
                return callback(err, null);
              });
            } else {
              connection.release();
              return callback(null, info);
            }
          })
        }
      })
    });
  });
}

上方的示例代码不再一一赘述,基本流程就是begin一个事务,然后开始执行,遇到错误则进行回滚操作,执行完成关闭数据库链接。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Nodejs学习笔记(四)--- 与MySQL交互(felixge/node-mysql)
简介和安装   Node.js与MySQL交互操作有很多库,具体可以在 https://www.npmjs.org/search?q=mysql  查看。   我选择了felixge/node-mys
Porschev
2018/01/16
2.4K0
Nodejs学习笔记(四)--- 与MySQL交互(felixge/node-mysql)
Nodejs学习笔记(七)--- Node.js + Express 构建网站简单示例
前言   上一篇学习了一些构建网站会用到的一些知识点 https://cloud.tencent.com/developer/article/1020636   这一篇主要结合前面讲到的知识,去构建一个较为完整的网站应用程序,对前面学到的一些知道做一个串联加深并灵活运用!   功能主要用MySQL数据库,包括登录、注册、主页三部分;下面就一步步开始吧! 新建项目、建立数据库以及其它准备工作 1.新建express + ejs 项目:sampleEjs cd 工作目录 express -e sampleEj
Porschev
2018/01/16
3.9K0
Nodejs学习笔记(七)--- Node.js + Express 构建网站简单示例
使用 NodeJS+Express+MySQL 实现简单的增删改查
在上篇文章 【使用NodeJS+Express开发服务端】我们已经学习了NodeJS+Express基本用法,你可能会记得我们的API接口返回的数据是假数 据并没有关联数据查询。在本篇文章中我们将实现基本的数据交互并实现简单 的增删改查。如果你还未阅读上篇文章请移步阅读~~~
100001509164
2022/01/20
4.1K0
使用 NodeJS+Express+MySQL 实现简单的增删改查
mysql问题排查实例
最近遇到应用频繁的响应缓慢,无法正常访问。帮忙一起定位原因,最后定位到的问题说起来真的是很小的细节问题,但是就是这些小细节导致了服务不稳定,真是细节决定成败。这里尝试着来分享下,希望对大家有所帮助。
后端技术探索
2018/08/09
1.1K0
Node 连接mysql数据库
github地址 https://github.com/jxcore/jxcore
mySoul
2018/07/31
3.9K0
初识NodeJS服务端开发之NodeJS+Express+MySQL
前言 我的天呐,上了一个上午的课,下午呆呆地在图书馆用python玩并发,晚上就玩玩NodeJS,其实是这样的,O(∩_∩)O哈哈~听说14周NodeJS要结课了,我今天就琢磨琢磨了一下NodeJS的开发框架以及熟悉了Express框架的基本环境。... ... 对express框架稍微扩展之后呢,okay之后,我感觉回到了之前写PHP的small-frame似的,结构目录看起来的感觉很熟悉,NodeJS与PHP果然是两兄弟。额额,主要是熟悉Express框架,好了,具体我要回忆我的晚上做了什么喽。 --
AlicFeng
2018/06/08
4.5K0
Vue3+TS+Node打造个人博客(后端架构)
Express[3] 是基于 Node.js 平台,快速、开放、极简的 Web 开发框架。目前已经更新到 5.x 版本。
程序员白彬
2022/03/14
9410
Vue3+TS+Node打造个人博客(后端架构)
实时会话系统实现(1) --- http轮询方式
最近一直在开发博客小程序,最近开发好友系统和实时会话系统。其实众所周知会话系统正常的业务逻辑应该是用户A给用户B发送一个消息,用户A发送后用户B马上可以接收到并在页面渲染出来,而且最新的消息应该是在页面最底部。那要实现这个实时会话有什么方法呢?我们通过本系列文章可以学到什么知识点呢?我们可以先看看本系列文章涉及的知识点:
创译科技
2019/11/14
1.8K0
实时会话系统实现(1) --- http轮询方式
node封装mysql操作
        node是基于异步的,因此在进行数据库查询操作的通常是通过回调来操作查询结果。但是在有了es7的async/await,基本不再需要回调了,所以本篇是基于async/await对mysql进行一次操作封装,让查询更加方便。(node版本需>=7.0)。 
用户2038589
2018/09/06
1.6K0
node封装mysql操作
基于nodejs的流水线式的CRUD服务。依赖注入可以支持插件。
当我们刚开始学习数据库编程的时候,我们会先写一段代码,实现往一个表里添加数据的功能。这段代码是必须写的,不写怎么会?
用户1174620
2019/05/26
6080
nodejs的session管理
在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
OECOM
2020/07/01
1.7K0
搭建node服务(二):操作MySQL
要想进行数据库操作就需要和数据库建立连接,然后通过连接进行数据库的操作。MySQL的数据库连接方式有以下几种:
宜信技术学院
2020/06/03
2K0
搭建node服务(二):操作MySQL
开箱即用!Node.js+Mysql模块封装
最近在写毕设,采用的是学弟+自己的技术栈,运用Vue3+ElementPlus搞前端,Node.js express做后端,毕竟,java那东西确实不在我技术栈里。
是乃德也是Ned
2023/03/01
1.2K0
开箱即用!Node.js+Mysql模块封装
NodeJS下连接mysql操作(增删查改)
NodeJS下要使用mySql需要安装mysql依赖,输入命令行:npm install mysql --save NodeJS中连接mysql数据库的简单方法我所知道的有createConnection(Object)方法和创建连接池 createPool(Object),这两个方法的参数相同,都接受一个对象作为参数,该对象有五个常用的属性host,port,user,password,database。与php中链接数据库的参数相同。属性列表如下:
bering
2019/12/03
2K0
node-mysql操作transactions的实例
如果执行commit后,再执行node.js脚本(执行的是一句更新sql--UPDATE user_info SET userName = ‘张一’ WHERE userId = 1)
meteoric
2018/11/16
9050
Node.js MYSQL数据库查询操作
更新数据 var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', port: '3306', database: 'test' }); connectio
陈不成i
2021/07/13
3.2K0
Nodejs中使用mariadb库连接MySQL数据库
最新写了一个水质同步入库的TypeScript程序,数据库使用的是MySQL,于是选择了mariadb这个库,其npmjs官网地址为https://www.npmjs.com/package/mariadb,Github仓库地址为:https://github.com/mariadb-corporation/mariadb-connector-nodejs
ccf19881030
2020/06/23
2.7K0
七、NodeJs数据库管理
MySQL程序可以使用PHP study集成工具。链接、操作数据库可以使用phpstudy自带的工具也可以使用navicat工具。
Dreamy.TZK
2020/07/07
1.3K0
七、NodeJs数据库管理
MySQL程序可以使用PHP study集成工具。链接、操作数据库可以使用phpstudy自带的工具也可以使用navicat工具。
Dreamy.TZK
2020/07/07
2.1K0
七、NodeJs数据库管理
nodejs的mysql管理
nodejs要想操作mysql需要安装第三方库--mysql,有了这个模块,操作mysql数据库就变得很容易了。连接mysql可以说有三种方式,分别是普通模式、连接池模式和集群连接池模式。
OECOM
2020/07/01
1.8K0
相关推荐
Nodejs学习笔记(四)--- 与MySQL交互(felixge/node-mysql)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验