Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

express-mysql-connection

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

express-mysql-connection - npm Package Compare versions

Comparing version 1.0.0 to 1.1.0

171

lib/express-mysql-connection.js
var _mysql,
_dbConfig,
_connection, // This is used as a singleton in a single connection strategy
_pool; // Pool singleton
_pool, // Pool singleton
_middlewareFn;
function handleDisconnect() {
_connection = _mysql.createConnection(_dbConfig);
_connection.connect(function (err) {
if (err) {
console.log('error when connecting to db:', err);
setTimeout(handleDisconnect, 2000);
}
});
_connection.on('error', function (err) {
console.log('db error', err);
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
handleDisconnect();
} else {
throw err;
}
});
}
module.exports = function (mysql, dbConfig, strategy) {

@@ -46,9 +26,63 @@

handleDisconnect(dbConfig);
// single connection strategy
// 单链接策略时返回的中间件 * * * * * * * * * * * * * * * *
_middlewareFn = function(req, res, next) {
req.getConnection = function (callback) {
callback(null, _connection);
}
next();
};
break;
case 'pool':
// Creating pool instance
_pool = _mysql.createPool(dbConfig);
// pool
// 连接池策略时返回的中间件 * * * * * * * * * * * * * * * *
_middlewareFn = function(req, res, next) {
var poolConn = null;
// Returning cached connection from a pool, caching is on request level
if(req.__expressMysqlConnectionCache__) {
req.getConnection = function (callback) {
pollConn = req.__expressMysqlConnectionCache__;
callback(null, requestConn);
}
}else {
// Getting connection from a pool
req.getConnection = function (callback) {
_pool.getConnection(function (err, connection) {
if (err) return callback(err);
poolConnection = connection;
callback(null, poolConnection);
});
}
}
closeConnection(res, poolConn);
next();
}
break;
case 'request':
// Nothing at this point do be done
// request
// 请求时创建连接,请求结束后自动释放 * * * * * * * * * * * *
_middlewareFn = function(req, res, next) {
var requestConn = null;
// Returning cached connection, caching is on request level
if(req.__expressMysqlConnectionCache__) {
req.getConnection = function(callback) {
requestConn = req.__expressMysqlConnectionCache__;
callback(null, requestConn);
}
}else {
req.getConnection = function(callback) {
requestConn = _mysql.createConnection(dbConfig);
requestConn.connect(function (err) {
if (err) return callback(err);
req.__expressMysqlConnectionCache__ = requestConn;
callback(null, requestConn);
});
}
}
closeConnection(res, null, requestConn);
next();
};
break;

@@ -58,78 +92,35 @@ default:

}
return _middlewareFn;
}
return function (req, res, next) {
var poolConnection,
requestConnection;
function handleDisconnect() {
_connection = _mysql.createConnection(_dbConfig);
switch (strategy) {
case 'single':
// getConnection will return singleton connection
req.getConnection = function (callback) {
callback(null, _connection);
}
break;
_connection.connect(function (err) {
if (err) {
console.log('error when connecting to db:', err);
setTimeout(handleDisconnect, 2000);
}
});
case 'pool':
// getConnection handled by mysql pool
req.getConnection = function (callback) {
// Returning cached connection from a pool, caching is on request level
if (poolConnection) return callback(null, poolConnection);
// Getting connection from a pool
_pool.getConnection(function (err, connection) {
if (err) return callback(err);
poolConnection = connection;
callback(null, poolConnection);
});
}
break;
case 'request':
// getConnection creates new connection per request
req.getConnection = function (callback) {
// Returning cached connection, caching is on request level
if (requestConnection) return callback(null, requestConnection);
// Creating new connection
var connection = _mysql.createConnection(dbConfig);
connection.connect(function (err) {
if (err) return callback(err);
requestConnection = connection;
callback(null, requestConnection);
});
}
break;
_connection.on('error', function (err) {
console.log('db error', err);
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
handleDisconnect();
} else {
throw err;
}
});
}
// Request terminanted unexpectedly.
res.on("close", function () {
// Ending request connection if available
if (requestConnection) requestConnection.end();
function closeConnection(res, poolConnection, requestConnection) {
// Request closed unexpectedly.
res.on("close", closeHandler);
// Finish
res.on("finish", closeHandler);
// Releasing pool connection if available
function closeHandler() {
if (poolConnection) poolConnection.release();
});
// Normal response flow.
res.on("finish", function () {
// Ending request connection if available
if (requestConnection) requestConnection.end();
// Releasing pool connection if available
if (poolConnection) poolConnection.release();
});
// // 原关闭连接方法
// var end = res.end;
// res.end = function (data, encoding) {
// console.log('end2');
// // Ending request connection if available
// if (requestConnection) requestConnection.end();
// // Releasing pool connection if available
// if (poolConnection) poolConnection.release();
// res.end = end;
// res.end(data, encoding);
// }
next();
}
}
{
"name": "express-mysql-connection",
"version": "1.0.0",
"version": "1.1.0",
"description": "express-mysql-connection middleware",

@@ -5,0 +5,0 @@ "main": "index.js",

express-mysql-connection
============
============
一个能让你更方便连接并操作mysql的express中间件。将mysql的连接挂载到request对象上
## 安装 Install
```
npm install express-mysql-connection
```
## 策略 Strategies
* `single` - 创建单个数据库连接,连接不会自动关闭,断开会自动尝试重连。 creates single database connection for an application instance. Connection is never closed. In case of disconnection it will try to reconnect again as described in node-mysql docs.
* `pool` - 使用连接池进行数据库连接,并且使用的连接会在请求响应后自动释放回连接池。 creates pool of connections on an app instance level, and serves a single connection from pool per request. The connections is auto released to the pool at the response end.
* `request` - 创建单个数据库连接,会在请求响应后自动关闭。 creates new connection per each request, and automatically closes it at the response end.
## 使用 Usage
### 使用中间件
```
var mysql = require('mysql'); // 需要引入mysql模块
var myConn = require('express-mysql-connection'); //引入本模块
var dbOptions = {
host: 'localhost',
user: 'dbuser',
password: 'password',
port: 3306,
database: 'mydb'
} // 数据库配置
var useConnRoutRs = ['/api', '/test']; // 声明需要使用数据库的路径
app.use(useConnRoutRs, myConn(mysql, dbOptions, 'pool')); // 使用
// 当然你也可以全局使用:
// app.use(myConn(mysql, dbOptions, 'pool'));
```
### 数据库查询
基本用法
```
app.get('api/foods', function(req, res, next) {
var sql = 'SELECT * FROM food';
// 获取连接
req.getConnection(function(err, conn) {
if(!err) {
// 执行sql查询
conn.query(sql,function(err, sqlResult) {
if(!err) {
// 响应结果
res.json(sqlResult);
}else {
throw err;
}
});
}else {
throw err;
}
});
});
```
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc