本文概述
几乎每种流行的编程语言(如PHP, Java, C#等)都提供了与MySql数据库连接的驱动程序。由于MySQL是世界上最受欢迎的开源数据库之一, 并且效率很高, 因此需要在Node.js中对其进行支持, 而且由于有了此模块, 你无需任何方式即可从Node.js进行访问。问题。我们正在谈论mysql模块, 它是mysql的node.js驱动程序。它使用JavaScript编写, 不需要编译, 并且100%获得MIT许可。
在本文中, 你将在几分钟内学习如何使用Node.js轻松连接到MySQL服务器中的任何数据库。
要求
要使用Node.js与MySQL进行互操作(在我们的示例中, 我们使用的Xampp包括PHPMyAdmin), 你需要以下名为mysql的节点包。
你可以在Node.js命令提示符下执行以下命令, 将此包添加到项目中:
npm install mysql
然后, 你将可以要求mysql模块。
注意:此模块是异常安全的。这意味着你可以继续使用它, 即使你的一个回调函数引发了使用” uncaughtException”或域捕获的错误。
实现
有两种访问MySQL数据库的方法, 当你只有一个数据库时, 可以选择简单的连接来快速访问。你应该使用池化连接来简化共享单个连接或管理多个连接的过程。
连接简单
以下示例公开了具有其最基本组件的连接。需要mysql服务, 将凭据作为createConnection方法中的第一个参数添加, 继续连接到数据库, 执行查询, 最后关闭连接。
你可以在此处阅读官方文档中连接对象的所有可用选项。
// Get the mysql service
var mysql = require('mysql');
// Add the credentials to access your database
var connection = mysql.createConnection({
host : 'localhost', user : '<USERNAME that tipically is root>', password : '<PASSWORD or just use null if youre working lcocally', database : '<DATABASE-NAME>'
});
// connect to mysql
connection.connect(function(err) {
// in case of error
if(err){
console.log(err.code);
console.log(err.fatal);
}
});
// Perform a query
$query = 'SELECT * from MyTable LIMIT 10';
connection.query($query, function(err, rows, fields) {
if(err){
console.log("An error ocurred performing the query.");
return;
}
console.log("Query succesfully executed: ", rows);
});
// Close the connection
connection.end(function(){
// The connection has been closed
});
池连接
var mysql = require('mysql');
var pool = mysql.createPool({
host : 'example.org', user : 'bob', password : 'secret', database : 'my_dbName'
});
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.
});
});
// The pool will emit a connection event when a new connection is made within the pool.
// If you need to set session variables on the connection before it gets used, you can listen to the connection event.
pool.on('connection', function (connection) {
console.log("Connected");
// Set a session variable
//connection.query('SET SESSION auto_increment_increment=1')
});
// <<< CLOSE THE CONNECTION USING pool.end >>>
// When you are done using the pool, you have to end all the connections or the Node.js
// event loop will stay active until the connections are closed by the MySQL server.
// This is typically done if the pool is used in a script or when trying to gracefully shutdown a server.
// To end all the connections in the pool, use the end method on the pool:
pool.end(function (err) {
// all connections in the pool have ended
});
提示
你可以使用通配符来创建易于阅读和维护的代码:
connection.query('SELECT * FROM `books` WHERE `author` = ?', ['David'], function (error, results, fields) {
// error will be an Error if one occurred during the query
// results will contain the results of the query
// fields will contain information about the returned results fields (if any)
});
除了将这些选项作为对象传递外, 还可以将url字符串用于连接。例如:
var connection = mysql.createConnection('mysql://user:pass@host/db?debug=true&charset=BIG5_CHINESE_CI&timezone=-0700');
为了避免SQL注入攻击, 在SQL查询中使用用户提供的数据之前, 应始终对其进行转义。你可以使用mysql.escape(), connection.escape()或pool.escape()方法进行操作:
var userId = 'some user provided value';
var sql = 'SELECT * FROM users WHERE id = ' + connection.escape(userId);
connection.query(sql, function(err, results) {
// Results ...
});
玩得开心 !
评论前必须登录!
注册