引言

在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中间件中的更多相关文章

  1. APNs功能之Node.js和Mysql应用总结

    APNs功能之Node.js和Mysql应用总结 这篇文档主要是总结Node.js和Mysql的学习心得体会.当然也可以看作是此前所写的消息推送服务的续篇. 简单描述下应用背景,我们的应用需要实现苹果 ...

  2. 使用node js 操作 Mysql 数据库

    使用node js 操作 Mysql 数据库 http://www.nodejs.org/ //node js 数据库操作 MySQL //使用https://github.com/felixge/n ...

  3. node.js使用mysql模块的坑

      之前用node.js写的订餐系统,很容易挂掉,一直也没想去解决它.今天看了一下,试了试,原因是在连接数据库的时候没有对error事件进行处理,导致程序一直挂在那里,需要重启服务才能正常使用.   ...

  4. 分享Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站

    这是个什么的项目? 使用 Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站. 博客线上地址:www.boblog.com Github地址:https: ...

  5. idea启动服务连接mysql后 Navicat连接mysql就报错2013-Lost connection toMySQL server at

    我是使用navicat的windows端 连接centos下mysql服务器 第一次常规连接mysql正常,idea启动服务连接mysql后 Navicat连接mysql就报错2013-Lost co ...

  6. Node.js使用MySQL的连接池

    使用Nodejs+MySQL肯定比PHP和MySQL的组合更适合做服务器端的开发. 使用Nodejs你会从他的异步行为中获益良多.比如,提升性能,你无须在从已有的MySQL数据库迁移到其他的NoSQL ...

  7. Node.js系列——(3)连接DB

    背景 node.js,有人称之为运行在服务器端的JavaScript.以往我们使用JavaScript时,都是依赖后端查询数据库并返回数据,而JavaScript只需要展示即可.问题来了,就不能绕开后 ...

  8. node.js环境安装,及连接mongodb测试

    1.node.js环境安装 npm config set python python2.7npm config set msvs_version 2013npm config set registry ...

  9. node.js链接mysql

    node.js连接数据库有很多种,比如:mongoose,oracle,mysql...,我自己玩就选了一个我很熟悉的轻量级的mysql数据库尝试了一把,感觉不错. 首先要把mysql客户端安装好,官 ...

随机推荐

  1. 搬-Android - Wi-Fi Tutorial[转]

    http://www.tutorialspoint.com/android/android_wi_fi.htm Android allows applications to access to vie ...

  2. DataTable转List(备忘)

    public static List ToList(DataTable dt) { List<Dictionary<string, object>> list = new Li ...

  3. android——自定义listView

    都知道微信主机面 有个界面会一行一一行的聊天记录,那个效果就可以用listview来实现(当然这只是其中的一种) listView是一种比较常见的组件它用来展示列的view,它是根据数据的长度来显示数 ...

  4. Eclipse自动补全设置

    如果你用过Visual Studio的自动补全功能后,再来用eclipse的自动补全功能,相信大家会有些许失望. 但是eclipse其实是非常强大的,eclipse的自动补全没有VS那么好是因为ecl ...

  5. SQL Server复制出错文章集锦

    SQL Server复制出错文章集锦 为了方便大家对数据库复制过程中出错的时候更好地解决问题 本人收集了SQL Server相关复制出错解决的文章   The process could not ex ...

  6. 更新Literacy

    之前都没有做单元测试的啊 昨天离职了,闲着没事做了个单元测试,结果发现一堆问题....大部分都是关于值类型在IL中的操作问题... 这件事让我感觉蛋蛋隐隐发疼....以后一定要做单元测试啊.... 具 ...

  7. ASP.NET MVC 从零开始 - create and run

    这篇文章是从我的 github 博客 http://lxconan.github.io 导入的. 如果你想用 ASP.NET MVC 创建一个网络应用,那么你可以搜到很多的文章.但是没有多少文章告诉你 ...

  8. C语言 · 出现次数最多的数

    问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来.如果有两 ...

  9. 【原】Telerik radwindow 在IE10下偶尔报 unable to get value of the property 'toLowerCase' 的解决办法

    笔者正在开发的新项目在升级了最新版本的Telerik Control和决定支持IE10后,遇到了一个很棘手的问题,偶尔会在打开Radwindow的时候报JS error :unable to get ...

  10. spring快速入门(一)

    对于为什么使用spring框架,这里不多做解释,详情请百度.本人推荐面向驱动程序学习,通过实战来瞧瞧spring技术的伟大.所以先来看看原始开发一个简单的例子,由例子引入spring相关的技术.如果错 ...