Node.js连接Mysql,并把连接集成进Express中间件中
引言
在node.js连接mysql的过程,我们通常有两种连接方法,普通连接和连接池。 这两种方法较为常见,当我们使用express框架时还会选择使用中间express-myconnection,可以单独对mysql配置,也可以把connection集成到express中间件中。 最后送上一个node.js 连接各种主流数据库示例代码。
前提条件
1、安装mysql对应的驱动,npm install mysql
2、安装第三方插件express-connection, npm install express-connection
普通连接
var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : 'secret',
  database : 'my_db'
});
connection.connect();
connection.query('select  * from solution', function(err, rows, fields) {
  if (err) throw err;
    console.log('The solution is: ', rows);
});
connection.end();
连接池
引入连接池后,最省事之处就是你不用每次用完以后去手动关闭connection。连接池的option还有很多选项,可以根据自己的需要来配置。
var mysql = require('mysql');
var pool  = mysql.createPool({
  connectionLimit : 10,
  host            : 'example.org',
  user            : 'bob',
  password    : 'secret'
});
pool.query('select  * from solution', function(err, rows, fields) {
  if (err) throw err;
  console.log('The solution is: ', rows);
});
当然如果你的应用没有那么多,而你对连接池回收机制又不放心,也可以手动关闭连接实现把连接放回到资源池里,调用connection.release()
pool.getConnection(function(err, connection) {
  // Use the connection
  connection.query( 'SELECT something FROM sometable', function(err, rows) {
    // And done with the connection.
    connection.release();
    // Don't use the connection here, it has been returned to the pool.
  });
});
关闭整个连接池的连接
pool.end(function (err) {
  // all connections in the pool have ended
});
express-myconnection
express-myconnection是一个Connect/Express自动提供mysql 连接的中间件。 共提供三中策略管理db连接。
- single。 创建单数据库应用实例,连接从不会关闭,万一连接因故障断掉,它还会重新连接。
- pool。 基于应用程序实例创建连接池,并且对每一个请求从连接池里提供连接,连接在每次response会自动释放返回到连接池里去。
- request。 针对每个request创建新的连接, 并且在response结束时会自动关闭。
这也是我在项目里所使用的方法,因为业务逻辑不复杂,没有封装db层,直接在app.js里配置,然后在路由层里直接调用。
app.js
var mysql = require('mysql'),
    myConnection = require('express-myconnection'),
    dbOptions = {
      host: 'localhost',
      user: 'dbuser',
      password: 'password',
      port: 3306,
      database: 'mydb'
    };
app.use(myConnection(mysql, dbOptions, 'single'); //作为中间件来使用
/router/order.js 在路由文件里应用
在这里也可以调用存储过程:conn.query('call usp_test',[传参数],function(err,result))
router.get('/cost', function(req, res, next) {
    req.getConnection(function(err, conn) {
        if (err) {
            return next(err);
        } else {
            conn.query('select * from test', [], function(err,result) {
                if (err) {
                    return next(err);
                } else {
                    res.Json(result); //可以直接把结果集转化Json返回给客户端
                }
            });
        }
    });
});
参考资料
https://tonicdev.com/npm/express-myconnection
http://expressjs.com/en/guide/database-integration.html
https://www.terlici.com/2015/08/13/mysql-node-express.html
Node.js连接Mysql,并把连接集成进Express中间件中的更多相关文章
- APNs功能之Node.js和Mysql应用总结
		APNs功能之Node.js和Mysql应用总结 这篇文档主要是总结Node.js和Mysql的学习心得体会.当然也可以看作是此前所写的消息推送服务的续篇. 简单描述下应用背景,我们的应用需要实现苹果 ... 
- 使用node js 操作 Mysql 数据库
		使用node js 操作 Mysql 数据库 http://www.nodejs.org/ //node js 数据库操作 MySQL //使用https://github.com/felixge/n ... 
- node.js使用mysql模块的坑
		之前用node.js写的订餐系统,很容易挂掉,一直也没想去解决它.今天看了一下,试了试,原因是在连接数据库的时候没有对error事件进行处理,导致程序一直挂在那里,需要重启服务才能正常使用. ... 
- 分享Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站
		这是个什么的项目? 使用 Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站. 博客线上地址:www.boblog.com Github地址:https: ... 
- idea启动服务连接mysql后 Navicat连接mysql就报错2013-Lost connection toMySQL server at
		我是使用navicat的windows端 连接centos下mysql服务器 第一次常规连接mysql正常,idea启动服务连接mysql后 Navicat连接mysql就报错2013-Lost co ... 
- Node.js使用MySQL的连接池
		使用Nodejs+MySQL肯定比PHP和MySQL的组合更适合做服务器端的开发. 使用Nodejs你会从他的异步行为中获益良多.比如,提升性能,你无须在从已有的MySQL数据库迁移到其他的NoSQL ... 
- Node.js系列——(3)连接DB
		背景 node.js,有人称之为运行在服务器端的JavaScript.以往我们使用JavaScript时,都是依赖后端查询数据库并返回数据,而JavaScript只需要展示即可.问题来了,就不能绕开后 ... 
- node.js环境安装,及连接mongodb测试
		1.node.js环境安装 npm config set python python2.7npm config set msvs_version 2013npm config set registry ... 
- node.js链接mysql
		node.js连接数据库有很多种,比如:mongoose,oracle,mysql...,我自己玩就选了一个我很熟悉的轻量级的mysql数据库尝试了一把,感觉不错. 首先要把mysql客户端安装好,官 ... 
随机推荐
- spring mvc + ehcache 利用注解实现缓存功能
			我的spring是3.1的,因为项目需求,需要在查询时候加上缓存,小白一个,完全没有用过缓存(ehcache),摸索了一天终于会了一点通过注解来使用ehcache进行缓存,立刻给记录下来. 首先 我的 ... 
- 太极旋转-JS实现
			刚学了js的一些函数,所以做了一个太极的旋转.做完之后是上面这个样子的,是可以旋转的. 思路: 1.先做一个基准转盘,之后将元素都放在转盘上,跟随转盘动. 2.画两个半圆,主要属性是border-to ... 
- C语言内存分配
			(1)代码区(text segment).存放CPU执行的机器指令(machine instructions).通常,代码区是可共享的 (即另外的执行程序可以调用它),因为对于频繁被执行的程序,只 ... 
- DotNet Core 介绍
			前言 asp.net core rtm 6月底即将发布,自己也想着为社区做点共享,刚好最近不太忙,看到社区的小伙伴们都在为dotnet core的推广而贡献力量,项目中刚好在用rc2版本,就多写些文章 ... 
- Sql Server数据库备份和恢复:原理篇
			本文与您探讨为什么Sql Server有完整备份.差异备份和事务日志备份三种备份方式,以及为什么数据库又有简单模式.完整模式和大容量日志模式这三种恢复模式.本文内容适用于2005以上所有版本的Sql ... 
- lua中清空目录和递归创建目录
			lua中的 lfs.mkdir lfs.rmdir只能针对单个目录,且lfs.rmdir不能清空文件夹 于是我想到了使用os.execute 递归创建目录如下os.execute("mkdi ... 
- 【VC++技术杂谈008】使用zlib解压zip压缩文件
			最近因为项目的需要,要对zip压缩文件进行批量解压.在网上查阅了相关的资料后,最终使用zlib开源库实现了该功能.本文将对zlib开源库进行简单介绍,并给出一个使用zlib开源库对zip压缩文件进行解 ... 
- [公告]Senparc.Weixin v4.7.0 升级说明(2016-08-08)
			本次升级包含了除QY以外所有的类库,升级内容包括: 1.重构Conatainer结构,删除 ItemCollection 属性,直接使用ContainerBag加入到缓存: 2.重构IContaine ... 
- EF优缺点的理解
			原先用的是三层架构中ADO.NET做底层开发,纯手工sql语句拼装.后来遇到一个MVC+EF项目,体会到了EF的强大性. 它是微软封装好一种ADO.NET数据实体模型,将数据库结构以ORM模式映射到应 ... 
- HTML5系列:HTML5与HTML4的区别
			1. 语法的改变 1.1 DOCTYPE声明 DOCTYPE声明在HTML文件中必不可少,位于文件第一行. HTML4中声明方法: <!DOCTYPE html PUBLIC "-// ... 
