![](/img/trans.png)
[英]About MySQL module in node.js and concurrent connections to mySQL Database
[英]Managing database connections in Node.js, best practices?
我正在构建一个 Node 应用程序,它将查询简单和更复杂(多个连接)的查询。 我正在寻找有关如何管理 mySQL 连接的建议。
我有以下要素:
//this is router1 router.get('/', function (req, res){ connection.connect(function(Err){...}); connection.query('SELECT* FROM table WHERE id = "blah"', function(err,results,fields){ console.log(results); }); ... connection.end(); })
我是否应该在每次请求“/router1/”时连接到 mysql,就像在这个例子中一样,还是最好在启动时保持一个连接打开? 作为:
connection.connect();在外面:
router.get('/',function(req,res){... });?
我为此使用 mysql2,它基本上是 mysql,但有承诺。 如果你使用 mysql 你也可以这样做。
创建一个名为 connection.js 之类的单独文件。
const mysql = require('mysql2');
const connection = mysql.createPool({
host: "localhost",
user: "",
password: "",
database: ""
// here you can set connection limits and so on
});
module.exports = connection;
然后最好创建一些模型并从控制器中调用它们,在router.get('/', (req, res) => {here});
一个模型看起来像这样:
const connection = require('../util/connection');
async function getAll() {
const sql = "SELECT * FROM tableName";
const [rows] = await connection.promise().query(sql);
return rows;
}
exports.getAll = getAll;
你可以在有或没有承诺的情况下做到这一点,这并不重要。 查询完成后,您与池的连接将自动释放。 然后你应该从你的路由器或应用程序调用 getAll 。
我希望这有帮助,如果没有,抱歉。
连接池是应该如何完成的。 为每个请求打开一个新连接会减慢应用程序的速度,它迟早会成为瓶颈,因为节点不会像 PHP 那样自动关闭连接。 因此,连接池确保固定数量的连接始终可用,并在需要时处理关闭不必要的连接。
这就是我使用 Sequelize 启动我的 Express 应用程序的方式。 对于 Mongoose,除了库 API 外,它或多或少是相似的。
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql',
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
});
sequelize.authenticate()
.then(
// On successfull connection, open a port
// and listen to requests. This is where the application
// starts listening to requests.
() => {
const server = http.createServer(app);
server.listen(port);
},
)
.catch(err => {
console.error('Unable to connect to the database:', err);
console.error('Cancelling app server launch');
});
该应用程序仅在建立数据库连接后启动。 这确保服务器在没有任何数据库连接的情况下不会处于活动状态。 连接池将默认保持连接打开,并使用池外的连接进行所有查询。
如果您使用createPool
mysql
将管理打开和关闭连接,您将获得更好的性能。 用mysql
还是mysql2还是sequlize都没关系。 为createPool
使用单独的文件并将其导出。 您可以在任何地方使用它。 不要使用类,只是在功能上使用它以获得更好的 nodejs 性能。
> npm install mysql
mysql 是一个很棒的模块,它使使用 MySQL 变得非常容易,并且它提供了您可能需要的所有功能。
一旦你安装了 mysql,你所要做的就是连接到你的数据库
var mysql = require('mysql')
var conn = mysql.createConnection({
host: 'localhost',
user: 'username',
password: 'password',
database: 'database'
})
conn.connect(function(err) {
if (err) throw err
console.log('connected')
})
现在您已准备好开始写入和读取数据库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.