Heim > Web-Frontend > js-Tutorial > Hauptteil

So bedienen und verwenden Sie MySQL in NodeJS (mit Code)

不言
Freigeben: 2018-08-14 16:46:02
Original
1564 Leute haben es durchsucht

Der Inhalt dieses Artikels befasst sich mit der Bedienung und Verwendung von MySQL in NodeJS (mit Code). Ich hoffe, dass er für Freunde hilfreich ist.

Installation

npm install mysql
Nach dem Login kopieren

MySQL testen

MySQL herunterladen und selbst installieren. Es ist ganz einfach.
Verwenden Sie das offizielle Beispiel

var mysql      = require(‘mysql’); 
  var connection = mysql.createConnection({ 
    host     : ‘localhost’, 
    user     : ‘me’, 
    password : ‘secret’, 

    database : ‘my_db’ 

  });//创建mysql链接 

   connection.connect(); 

   connection.query(‘SELECT 1 + 1 AS solution’, function (error, results, fields) { 

    if (error) throw error; 

    console.log(‘The solution is: ‘, results[0].solution); 

  });//执行sql语句 

   connection.end();//关闭链接
Nach dem Login kopieren
Lernen Sie die Verbindungsoptionen kennen

Wenn Sie eine Datenbankverbindung erstellen möchten, müssen Sie zunächst die Optionen verstehen

  host:主机地址 (默认:localhost) 

  user:用户名 

  password:密码 

  port:端口号 (默认:3306) 

  database:数据库名 

  charset:连接字符集(默认:’UTF8_GENERAL_CI’,注意字符集的字母都要大写) 

  localAddress:此IP用于TCP连接(可选) 

  socketPath:连接到unix域路径,当使用 host 和 port 时会被忽略 

  timezone:时区(默认:’local’) 

  connectTimeout:连接超时(默认:不限制;单位:毫秒) 

  stringifyObjects:是否序列化对象(默认:’false’ ;与安全相关(https://github.com/felixge/node-mysql/issues/501) 

  typeCast:是否将列值转化为本地JavaScript类型值 (默认:true) 

  queryFormat:自定义query语句格式化方法 (https://github.com/felixge/node-mysql#custom-format) 

  supportBigNumbers:数据库支持bigint或decimal类型列时,需要设此option为true (默认:false) 

  bigNumberStrings:supportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回(默认:false) 

  dateStrings:强制timestamp,datetime,data类型以字符串类型返回,而不是JavaScript Date类型(默认:false) 

  debug:开启调试(默认:false) 

  multipleStatements:是否许一个query中有多个MySQL语句 (默认:false) 

  flags:用于修改连接标志,更多详情:(https://github.com/felixge/node-mysql#connection-flags) 

  ssl:使用ssl参数(与crypto.createCredenitals参数格式一至)或一个包含ssl配置文件名称的字符串,目前只捆绑Amazon RDS的配置文件
Nach dem Login kopieren

Hinzufügen, Löschen, Ändern und Überprüfen

Hinzufügen, Löschen, Ändern und Überprüfen werden hauptsächlich durch SQL-Anweisungen bestimmt.

1.
var  userAddSql = ‘INSERT INTO userinfo(Id,UserName,UserPass) VALUES(0,?,?)’; 

  var  userAddSql_Params = [‘Wilson’, ‘abcd’]; 

  connection.query(userAddSql,userAddSql_Params,function (err, result) { 

    … 

  });
Nach dem Login kopieren
2. Löschen Sie
var userModSql = ‘DELETE FROM userinfo’; 

  connection.query(userModSql,function (err, result) { 

  … 

  });
Nach dem Login kopieren
var userModSql = ‘UPDATE userinfo SET UserName = ?,UserPass = ? WHERE Id = ?’; 

  var userModSql_Params = [‘钟慰’, ‘5678’,1]; 

  connection.query(userModSql,userModSql_Params,function (err, result) { 

  … 

  });
Nach dem Login kopieren
4. Abfrage
var  userGetSql = ‘SELECT * FROM userinfo’; 

  connection.query(userGetSql ,function (err, result) { 

  … 

  });
Nach dem Login kopieren
Zwei Methoden und Unterschiede zum Beenden einer Datenbankverbindung

Im vorherigen Beispiel werde ich eine Verbindung.end() aufrufen end Methode, diese Methode connect.connect() entspricht einem Start und einem Ende!

Es gibt tatsächlich zwei Methoden zum Beenden der Verbindung: end() und destroy();


Die end()-Methode wird ausgeführt, nachdem die Abfragen abgeschlossen sind. Wenn vorhanden, erhält die end()-Methode eine Rückruffunktion Bei einem Fehler bei der Abfrageausführung wird die Verbindung abgebrochen. Der Fehler wird an den err-Parameter der Callback-Funktion zurückgegeben und kann in der Callback-Funktion behandelt werden!

Destory() ist relativ heftig. Es hat keine Rückruffunktion und wird sofort ausgeführt, unabhängig davon, ob die Abfrage abgeschlossen ist!

Trennung und erneute Verbindung

var mysql = require(‘mysql’); 

  var db_config = { 

    host     : ‘192.168.0.200’, 

    user     : ‘root’, 

    password : ‘abcd’, 

    port: ‘3306’, 

    database: ‘nodesample’ 

  }; 

  var connection; 

  function handleDisconnect() { 

    connection = mysql.createConnection(db_config); 

    connection.connect(function(err) { 

      if(err) { 

        console.log(“进行断线重连:” + new Date()); 

        setTimeout(handleDisconnect, 2000);   //2秒重连一次 

        return; 

      } 

       console.log(“连接成功”); 

    }); 

    connection.on(‘error’, function(err) { 

      console.log(‘db error’, err); 

      if(err.code === ‘PROTOCOL_CONNECTION_LOST’) {  

        handleDisconnect(); 

      } else { 

        throw err; 

      } 

    }); 

  } 

  handleDisconnect();
Nach dem Login kopieren

SQL-Link-Pool Pooling-Verbindungen

1. Um einen Verbindungspool zu erstellen, verwenden Sie die Option „createPool“. und createConntion ist konsistent und kann Verbindungsereignisse überwachen.

Der Verbindungspool wird automatisch getrennt und wieder verbunden

var mysql = require(‘mysql’); 

  //创建连接池 

  var pool  = mysql.createPool({ 

    host     : ‘192.168.0.200’, 

    user     : ‘root’, 

    password : ‘abcd’ 

  }); 

  //监听connection事件 

  pool.on(‘connection’, function(connection) { 

      connection.query(‘SET SESSION auto_increment_increment=1’); 

  }); 

    

  连接池可以直接使用,也可以共享一个连接或管理多个连接(引用官方示例) 

  //直接使用 

  pool.query(‘SELECT 1 + 1 AS solution’, function(err, rows, fields) { 

    if (err) throw err; 

    console.log(‘The solution is: ‘, rows[0].solution); 

  }); 

  //共享 

  pool.getConnection(function(err, connection) { 

    // connected! (unless err is set) 

  });
Nach dem Login kopieren

2. Andere Verbindungspool-Konfigurationsoptionen

waitForConnections

Wenn der Verbindungspool keine Verbindungen hat oder das maximale Limit überschreitet, setzen Sie ihn auf „true“ und die Verbindung wird in die Warteschlange gestellt. Setzen Sie ihn auf „false“ und es wird ein Fehler zurückgegeben

ConnectionLimit-Verbindungsanzahllimit, Standard: 10
queueLimit maximales Warteschlangenlimit für Verbindungsanfragen, auf 0 gesetzt, um keine Begrenzung anzuzeigen, Standard: 0

3. Release
Aufrufen der Methode „connection.release()“. stellt die Verbindung wieder in den Verbindungspool ein und wartet auf die Verwendung durch andere Benutzer!
Andere...

1 Um eine SQL-Injection zu verhindern, können Sie pool.escape() und connect.escape() verwenden. Nicht viel zu sagen, Sie können

so versuchen, indem Sie 'SELECT * FROM userinfo WHERE id = ' + pool.escape verwenden (' 5 OR ID = 6')

2.escapeId()
Wenn Sie der SQL-ID (Datenbankname, Tabellenname, Spaltenname) nicht vertrauen können, können Sie die Konvertierungsmethode verwenden escapeId();

Ähnlich wie 'SELECT * FROM posts ORDER BY ' + connect.escapeId("date");

3.format()

Sie können MySQL verwenden. Format zum Vorbereiten von Abfrageanweisungen. Die Funktion wählt automatisch die geeignete Methode zum Escapen von Parametern.

var sql = “SELECT * FROM ? WHERE ? = ?”; 

     var inserts = [‘users’, ‘id’, 123]; 

      sql = mysql.format(sql, inserts);
Nach dem Login kopieren

4. Benutzerdefinierte Formatierungsfunktion

connection.config.queryFormat = function (query, values) {
  if (!values) return query;
  return query.replace(/:(\w+)/g, function (txt, key) {
    if (values.hasOwnProperty(key)) {
      return this.escape(values[key]);
    }
    return txt;
  }.bind(this));
};
connection.query("UPDATE posts SET title = :title", { title: "Hello MySQL" });
Nach dem Login kopieren
Verwandte Empfehlungen:

JS-Code zur Implementierung der Datenübertragung zwischen Seiten

So implementieren Sie die Funktion zum Ändern der Hautfarbe in Reac

Welche Methoden werden in jQuery häufig verwendet (mit Code)

Das obige ist der detaillierte Inhalt vonSo bedienen und verwenden Sie MySQL in NodeJS (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage