nodejs mysql 关闭和打开连接
nodejs mysql close and open connection
我有一个连接到 mysql 的 nodejs 应用程序 当我离开连接时打开服务器关闭它 当我使用 con.destroy 或 con.end 我无法重新连接到 mysql.
我应该怎么办,知道会有很多请求时,最好继续关闭并为每个请求选择新连接。
module.exports = class DataAccessLayer {
constructor() {
this.con = mysql.createConnection({
host: ("host.com"),
user: ("asdfg"),
password: ("zxcvb"),
database: ("DB_example")
});
this.con.connect(function (err) {
if (err) throw err;
console.log("Connected to DB");
});
}
getUserBySenderId(senderId) {
this.con.query("SELECT sender_id,first_name,last_name,creation_date " +
"FROM USER " +
"WHERE sender_id = '" + senderId + "'",
function (err, result, fields) {
if (err) throw err;
console.log(result);
});
}
针对每个请求创建和断开数据库连接会降低每个请求的响应时间,从而影响整体性能。您应该考虑使用 https://www.npmjs.com/package/mysql#pooling-connections 中记录的连接池。连接池将应用程序与服务器因缺少 activity.
而终止空闲连接等场景隔离开来
对于你的问题,你可以访问这个文档https://www.npmjs.com/package/mysql#pooling-connections。
而不是每次都进行查询并一次又一次地进行数据库命中 MYSQL。还需要记住什么时候关闭连接什么时候打开是一个相当繁琐的工作。您可以使用 Sequelize http://docs.sequelizejs.com/ (ORM)。这将帮助您摆脱所有这些痛苦,让您专注于业务逻辑而不是技术错误。
HTH 谢谢!
"use strict"
const mysql = require("mysql");
class DB {
constructor() {
this.conn = mysql.createConnection({
host: 'localhost',enter code here
user: 'root',
password: 'pass',
database: 'db_name'
});
}
connect() {
this.conn.connect(function (err) {
if (err) {
console.error("error connecting: " + err.stack);
return;
}
console.log("connected to DBB");
});
}
checkQuery(id) {
try {
this.conn.query(`SELECT * FROM tablename WHERE id = ${id}`, function (err, result) {
if (err) {
console.log('err');
throw err;
} else {
console.log(result);
}
});
} catch (e) {
console.log('Exception caught in checkQuery()', e)
}
}
module.exports = DB
var obj = new DB();
obj.checkQuery(2);
你应该使用mysql pooling,但是如果你想为每个请求打开和关闭一个连接,你可以使用async
const async = require('async')
const mysql = require('mysql')
const db = mysql.createConnection(DBInfo)
const query = 'SOME MYSQL QUERY'
async.series([
function (next) {
db.connect(function (err) {
if (err) {
console.error('error connecting: ' + err.stack)
next(Error(err))
} else {
console.log('Connection successfuly')
next()
}
})
},
function (next) {
db.query(query, function (err, results, fields) {
if (err) {
next(Error(err))
} else {
console.log(query + ' submitted with success')
next()
}
})
},
function (next) {
db.end(function (err) {
if (err) {
next(Error(err))
} else {
next()
}
})
}
],
function (err, results) {
if (err) {
console.error('There was an error: ', err)
db2.end()
}
})
我有一个连接到 mysql 的 nodejs 应用程序 当我离开连接时打开服务器关闭它 当我使用 con.destroy 或 con.end 我无法重新连接到 mysql.
我应该怎么办,知道会有很多请求时,最好继续关闭并为每个请求选择新连接。
module.exports = class DataAccessLayer {
constructor() {
this.con = mysql.createConnection({
host: ("host.com"),
user: ("asdfg"),
password: ("zxcvb"),
database: ("DB_example")
});
this.con.connect(function (err) {
if (err) throw err;
console.log("Connected to DB");
});
}
getUserBySenderId(senderId) {
this.con.query("SELECT sender_id,first_name,last_name,creation_date " +
"FROM USER " +
"WHERE sender_id = '" + senderId + "'",
function (err, result, fields) {
if (err) throw err;
console.log(result);
});
}
针对每个请求创建和断开数据库连接会降低每个请求的响应时间,从而影响整体性能。您应该考虑使用 https://www.npmjs.com/package/mysql#pooling-connections 中记录的连接池。连接池将应用程序与服务器因缺少 activity.
而终止空闲连接等场景隔离开来对于你的问题,你可以访问这个文档https://www.npmjs.com/package/mysql#pooling-connections。
而不是每次都进行查询并一次又一次地进行数据库命中 MYSQL。还需要记住什么时候关闭连接什么时候打开是一个相当繁琐的工作。您可以使用 Sequelize http://docs.sequelizejs.com/ (ORM)。这将帮助您摆脱所有这些痛苦,让您专注于业务逻辑而不是技术错误。
HTH 谢谢!
"use strict"
const mysql = require("mysql");
class DB {
constructor() {
this.conn = mysql.createConnection({
host: 'localhost',enter code here
user: 'root',
password: 'pass',
database: 'db_name'
});
}
connect() {
this.conn.connect(function (err) {
if (err) {
console.error("error connecting: " + err.stack);
return;
}
console.log("connected to DBB");
});
}
checkQuery(id) {
try {
this.conn.query(`SELECT * FROM tablename WHERE id = ${id}`, function (err, result) {
if (err) {
console.log('err');
throw err;
} else {
console.log(result);
}
});
} catch (e) {
console.log('Exception caught in checkQuery()', e)
}
}
module.exports = DB
var obj = new DB();
obj.checkQuery(2);
你应该使用mysql pooling,但是如果你想为每个请求打开和关闭一个连接,你可以使用async
const async = require('async')
const mysql = require('mysql')
const db = mysql.createConnection(DBInfo)
const query = 'SOME MYSQL QUERY'
async.series([
function (next) {
db.connect(function (err) {
if (err) {
console.error('error connecting: ' + err.stack)
next(Error(err))
} else {
console.log('Connection successfuly')
next()
}
})
},
function (next) {
db.query(query, function (err, results, fields) {
if (err) {
next(Error(err))
} else {
console.log(query + ' submitted with success')
next()
}
})
},
function (next) {
db.end(function (err) {
if (err) {
next(Error(err))
} else {
next()
}
})
}
],
function (err, results) {
if (err) {
console.error('There was an error: ', err)
db2.end()
}
})